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