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 Collection
qui, non necessariamente un ArrayList
, quindi non puoi fare affidamento get
.