Voici une petite astuce pour parcourir un objet java.util.List en supprimant ses éléments, mais sans tomber face à l’exception suivante : java.util.ConcurrentModificationException.
Le code à problèmes
import java.util.ArrayList; import java.util.List; public static void main(String[] args) { List fail = new ArrayList(); fail.add("Un"); fail.add("Deux"); fail.add("Trois"); fail.add("Quarte"); for (String elem : fail) { if (elem.startsWith("D")) { fail.remove(elem); } } }
L’exception
Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343)
La solution
Il vous suffit d’utiliser un iterator pour parcourir votre liste. Il vous propose également une méthode remove() pour supprimer l’élément en cours de traitement sans tomber dans la même exception.
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public static void main(String[] args) { List fail = new ArrayList(); fail.add("Un"); fail.add("Deux"); fail.add("Trois"); fail.add("Quarte"); Iterator success = fail.iterator(); while(success.hasNext()) { String elem = success.next(); if (elem.startsWith("D")) { success.remove(); } } }