Parcourir une liste Java en supprimant des éléments

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();
		}
	}
}