Другие предложили использовать итератор списка. Это оказалось полезным для меня, но, к сожалению, оно основано на методе remove()
, который интерфейс Iterable<E>
считает необязательным.
Квот Javadoc, никогда (акцент мой):
void remove ()
Удаляет из базовой коллекции последний элемент, возвращаемый
итератор (необязательная операция) .
Чтобы обойти то, что оказалось более полезным для меня, это список удаления.
List<E> removed = new ArrayList<E>();
for(E element : list) {
if(someCondition) removed.add(element);
}
list.removeAll(removed);
Это дает дополнительное преимущество, так как дает вам историю того, что вы удалили, так же, как это делает метод удаления.