Sappiamo tutti che non puoi fare quanto segue a causa di ConcurrentModificationException:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Ma a quanto pare a volte funziona, ma non sempre. Ecco un codice specifico:
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);
}
Questo, ovviamente, si traduce in:
Exception in thread "main" java.util.ConcurrentModificationException
Anche se più thread non lo stanno facendo. Comunque.
Qual è la migliore soluzione a questo problema? Come posso rimuovere un elemento dalla raccolta in un ciclo senza generare questa eccezione?
Sto anche usando un arbitrario Collectionqui, non necessariamente un ArrayList, quindi non puoi fare affidamento get.