Todos sabemos que você não pode fazer o seguinte por causa de ConcurrentModificationException:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Mas isso aparentemente funciona às vezes, mas nem sempre. Aqui está um código específico:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
Obviamente, isso resulta em:
Exception in thread "main" java.util.ConcurrentModificationException
Mesmo que vários threads não estejam fazendo isso. De qualquer forma.
Qual é a melhor solução para esse problema? Como posso remover um item da coleção em um loop sem lançar essa exceção?
Também estou usando um arbitrário Collectionaqui, não necessariamente um ArrayList, então você não pode confiar get.