Considere:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Como seria o laço equivalente "para" sem utilizar a sintaxe para cada?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Note que se você precisa utilizar i.remove();
em seu loop, ou acessar o iterador real de alguma forma, você não pode utilizar a expressão for ( : )
, já que o iterador real é meramente inferido.
Como foi observado por Denis Bueno, este código funciona para qualquer objeto que implemente a interface iterável.
Além disso, se o lado direito do for (:)
idioma é um objeto array
em vez de um objeto Iterable
, o código interno utiliza um contador de índice int e verifica contra array.length
em vez disso. Veja a Especificação da Linguagem Java.
O laço para cada em Java usa o mecanismo de iterador subjacente. Portanto, é idêntico ao seguinte:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}