La boucle for-each, introduite à partir du JDK 1.5, permet d'utiliser une boucle for spécifique pour itérer une collection Java.
Collection collection = new Vector();
for(Object valeur : collection){
System.out.println(valeur.toString());
}
//équivaut à
for (Iterator ite = collection.iterator(); ite.hasNext(); )
System.out.println(ite.next().toString());
}
//équivaut à
for (int i = 0; i < collection.size(); i++)
System.out.println(collection.get(i).toString());
}
La boucle for est capable de parcourir n'importe quelle collection Java, soit des listes (List), des ensembles (Set) ou des associations clé/valeur (Map). Dans ce dernier type de collection, la boucle for doit déclarer un objet Map.Entry représentant une paire clé/valeur.
TreeMap associations = new TreeMap();
for (Map.Entry entree : associations){
System.out.println(entree.getKey() + " " + entree.getValue());
}
Désormais, les collections Java peuvent expliciter le type des valeurs contenues dans une collection. Evidemment la boucle for-each prend en compte cette caractéristique. Pour cela, il suffir d'indiquer le type de la valeur à exploiter dans la boucle.
ArrayLIst<String> liste = new ArrayList<String>();
for(String valeur : liste){
System.out.println(valeur);
}
HashTable<String, ZipFile> associations =
new Hashtable<String, ZipFile>();
for(Map.Entry entree : associations){
String cle = entree.getKey();
ZipFile archive = entree.getValue();
}
public class Videos {
private ArrayList liste;
public Videos(){
liste = new Videos();
}
public void enregistrer(){
liste.put(new Video("Voyage au bout de l'enfer", "Michael Cimino", 1978));
liste.put(new Video("Le jour le plus long", "Ken Annakin", 1962));
liste.put(new Video("Un pont trop loin", "Richard Attenborough", 1977));
liste.put(new Video("Platoon", "Oliver Stone", 1986));
liste.put(new Video("Full metal jacket", "Stanley Kubrik", 1987));
liste.put(new Video("La ligne rouge", "Terrence Malick", 1998));
liste.put(new Video("The patriot", "Roland Emmerich", 2000));
liste.put(new Video("Outrages", "Brian De Palma", 1990));
liste.put(new Video("Paris brûle-t-il ?", "René Clément", 1966));
liste.put(new Video("Tora ! Tora ! Tora !", "Richard Fleischer", 1970));
liste.put(new Video("Guerre et Paix", "King Vidor", 1956));
liste.put(new Video("Apocalypse now", "Francis Ford Coppola", 1979));
}
public String lister(){
StringBuffer sb = new StringBuffer();
for(Video video : videos){
sb.append(video.toString());
sb.append(System.getProperty("line.separator"));
}
}
}
public class Video {
private String titre;
private String realisateur;
private int annee;
public Video(
String titre,
String realisateur,
int annee){
this.titre = titre;
this.realisateur = realisateur;
this.annee = annee;
}
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append(this.titre);
sb.append(";");
sb.append(this.realisateur);
sb.append(";");
sb.append(this.annee);
return sb.toString();
}
}