Um dos recursos mais usados em qualquer linguagem são operadores de repetição como for e while. No Java, o for tem sido vagarosamente evoluído, sendo que com o Java 8 recebemos a Terceira Geração de Iteradores. Ou seja, passamos pela primeira e segunda geração. Mas quais são elas?!
Para exemplificarmos vamos utilizar a lista de frutas abaixo. Nosso objetivo é iterar sobre esta lista e imprimir as frutas.
List<String> frutas = Arrays.asList("banana", "maça", "limão");
A Primeira Geração é o famoso for com índice, carinhosamente comumente chamado de ì
.
for (int i = 0; i < frutas.size(); i++) {
System.out.println(frutas.get(i));
}
A Segunda Geração é a geração do foreach, recurso que veio com o Java 5, que já nos retorna cada objeto baseado numa lista não necessitando de um índice explícito, casts e get para pegar determinado elemento.
for(String fruta : frutas) {
System.out.println(fruta);
}
Ambas a primeira e segunda geração são consideradas formas de iteração externa, ou seja, nós temos que, explicitamente, nos preocupar em como iremos iterar na lista e em o que fazer a cada iteração.
De fato, o que importa na maioria das vezes é o que iremos fazer a cada iteração. Por isso, no Java 8 é justamente isso que acontece. Não precisamos mais nos preocupar em fazer a iteração, apenas em o que fazer com cada objeto a cada iteração.
Com a Terceira Geração de Iteradores é a primeira vez que surge no Java a iteração interna. A complexidade da iteração foi encapsulada no método forEach
adicionado a interface Iterable
.
Usando a iteração interna é possível aperfeiçoar a execução para que a iteração seja feita de forma paralela internamente pelo SDK sem interefrir negativamente em implementações existentes. Isso elimina uma dúvida existente quando se usa gerações anteriores sobre qual iterador usar, o for com índice ou o foreach com objeto, pensando em qual teria um desempenho melhor.
A ordenação das frutas com o forEach
do Java 8 pode ser feita da seguinte forma:
frutas.forEach((s) -> System.out.println(s));
E ainda é possível utilizar um outro recurso do Java 8 que é o Method Reference, ficando ainda mais simples, conforme a seguir:
frutas.forEach(System.out::println)
E aí, gostou dessa nova geração de iteradores? Já conhecia? Conta aqui nos comentários.
Até mais!