Допустим, у меня есть список типа:
List<String> list = new ArrayList<>();
list.add("a");
list.add("h");
list.add("f");
list.add("s");
Во время итерации по этому списку я хочу добавить элемент в конец списка. Но я не хочу выполнять итерацию по вновь добавленным элементам, то есть я хочу выполнять итерацию до начального размера списка.
for (String s : list)
/* Here I want to add new element if needed while iterating */
Может ли кто-нибудь подсказать мне, как я могу это сделать?
Итерация по копии списка и добавление новых элементов в исходный список.
for (String s : new ArrayList<String>(list))
{
list.add("u");
}
Просто выполняйте итерацию по старинке, потому что вам нужна явная обработка индексов:
List myList = ...
...
int length = myList.size();
for(int i = 0; i < length; i++) {
String s = myList.get(i);
// add items here, if you want to
}
Вы можете выполнять итерации над копией (клоном) вашего исходного списка:
List<String> copy = new ArrayList<String>(list);
for (String s : copy) {
// And if you have to add an element to the list, add it to the original one:
list.add("some element");
}
Обратите внимание, что даже невозможно добавить новый элемент в список во время итерации по нему, потому что это приведет к ConcurrentModificationException
.