Добавить элементы в список, перебирая его. (Java) [дубликат]

Возможный дубликат:
Java: добавление элементов в коллекцию во время итерации

Моя проблема в том, что я хочу расширить список новыми элементами во время итерации по нему, и я хочу, чтобы итератор продолжил работу с элементами, которые я только что добавил .

Насколько я понимаю, ListIterator.add () добавляет элемент перед текущим элементом в списке, а не после него. Можно ли добиться этого каким-либо другим способом?

30
задан ROMANIA_engineer 6 October 2017 в 20:00
поделиться

2 ответа

Вы не можете изменять коллекцию, перебирая ее, используя 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

Это будет работать, за исключением случаев, когда список начинает итерацию пустым, и в этом случае предыдущего элемента не будет. Если это проблема, вам придется поддерживать некоторый флаг, чтобы указать этот крайний случай.

29
ответ дан 28 November 2019 в 00:04
поделиться

Как насчет

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);
7
ответ дан 28 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: