假设我有一组地理位置(格式为国家 > 地区 [ > 城镇 [ > 区域]]
),我想要移除重叠的位置(例如,欧洲 > 德国
与 欧洲 > 德国 > 德累斯顿
和 欧洲 > 德国 > 汉堡
重叠,因此后两个必须被移除)。我发现需要使用两个迭代器实例来实现这样的功能:
final Iterator<Location> outerIterator = locations.newIterator();
while (outerIterator.hasNext()) {
final Location outer = outerIterator.next();
final Iterator<Location> innerIterator = locations.newIterator();
while (innerIterator.hasNext()) {
final Location inner = innerIterator.next();
if (!inner.equals(outer)) {
if (inner.overlaps(outer)) outerIterator.remove();
else if (outer.overlaps(inner)) innerIterator.remove();
}
}
}
但是我无法为同一集合获取新的Iterator
。我的算法是否有误或者有正确的方法可以实现?
最终代码使用提供的答案中Carl Smotricz的建议,看起来像这样:
final Iterator<JobLocation> outerIterator = locations.iterator();
while (outerIterator.hasNext()) {
final JobLocation outer = outerIterator.next();
final Iterator<JobLocation> innerIterator = locations.iterator();
while (innerIterator.hasNext()) {
final JobLocation inner = innerIterator.next();
if (!inner.equals(outer) && inner.overlaps(outer)) {
outerIterator.remove();
break;
}
}
}