Возможный дубликат:
Java: добавление элементов в коллекцию во время итерацииМоя проблема в том, что я хочу расширить список новыми элементами во время итерации по нему, и я хочу, чтобы итератор продолжил работу с элементами, которые я только что добавил .
Насколько я понимаю,
ListIterator.add ()
добавляет элемент перед текущим элементом в списке, а не после него. Можно ли добиться этого каким-либо другим способом?
Вы не можете изменять коллекцию, перебирая ее, используя Iterator
, за исключением Iterator.remove()
.
Однако, если вы используете метод listIterator()
, который возвращает ListIterator
, и итерируете, у вас есть больше вариантов для изменения. Из javadoc для add()
:
Новый элемент вставляется перед неявным курсором: ... последующий вызов
previous()
вернет новый элемент
Учитывая это, этот код должен работать для установки нового элемента в качестве следующего в итерации:
ListIterator<T> i;
i.add(e);
i.previous(); // returns e
i.previous(); // returns element before e, and e will be next
Это будет работать, за исключением случаев, когда список начинает итерацию пустым, и в этом случае предыдущего элемента не будет. Если это проблема, вам придется поддерживать некоторый флаг, чтобы указать этот крайний случай.
Как насчет
List<Foo> fooList = getFooList();
List<Foo> tempFooList = new ArrayList<Foo>()
for(Foo f : fooList)
{
...
// add items that need to be added to temp
tempFooList.add(new Foo());
...
}
fooList.addAll(tempFooList);