Pensez-y :
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
A quoi ressemblerait la boucle for
équivalente sans utiliser la syntaxe for each ?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Notez que si vous devez utiliser i.remove();
dans votre boucle, ou accéder à l'itérateur réel d'une manière ou d'une autre, vous ne pouvez pas utiliser l'idiome for ( : )
, puisque l'itérateur réel est simplement déduit.
Comme l'a noté Denis Bueno, ce code fonctionne pour tout objet qui implémente l'interface [Iterable
][1].
De plus, si le côté droit de l'idiome for ( :)
est un array
plutôt qu'un objet Iterable
, le code interne utilise un compteur d'index int et vérifie contre array.length
à la place. Voir la [Spécification du langage Java][2].
[1] : http://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html [2] : http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2
La boucle for-each en Java utilise le mécanisme sous-jacent des itérateurs. Elle est donc identique à ce qui suit :
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}