Todos sabemos que no puede hacer lo siguiente por ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Pero esto aparentemente funciona a veces, pero no siempre. Aquí hay un 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);
}
Esto, por supuesto, da como resultado:
Exception in thread "main" java.util.ConcurrentModificationException
A pesar de que múltiples hilos no lo están haciendo. De todas formas.
¿Cuál es la mejor solución para este problema? ¿Cómo puedo eliminar un elemento de la colección en un bucle sin lanzar esta excepción?
También estoy usando un arbitrario Collection
aquí, no necesariamente un ArrayList
, por lo que no puede confiar get
.