Скажем, у меня есть коллекция некоторых геолокаций (в формате Country > Region [ > Town [ > District]]
), и я хочу удалить местоположения, которые перекрывают друг друга (например, Europe > Germany
перекрывается Europe > Germany > Dresden
и Europe > Germany > Hamburg
, поэтому последние два должныудалить).Я вижу, что мне нужно два экземпляра итераторов, чтобы сделать что-то вроде этого:
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
для той же коллекции.Мой алгоритм неверен или есть способ сделать это правильно?
Окончательный код, использующий совет из ответа , предоставленного Карл Смотриц выглядитэто:
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;
}
}
}