Wszyscy wiemy, że nie możesz wykonać następujących czynności z powodu ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Ale to najwyraźniej działa czasami, ale nie zawsze. Oto konkretny kod:
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);
}
To oczywiście skutkuje:
Exception in thread "main" java.util.ConcurrentModificationException
Nawet jeśli wiele wątków tego nie robi. Tak czy siak.
Jakie jest najlepsze rozwiązanie tego problemu? Jak mogę usunąć element z kolekcji w pętli bez zgłaszania tego wyjątku?
Używam tu również arbitralnego Collection
, niekoniecznie ArrayList
, więc nie możesz na nim polegać get
.