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