Está de saco cheio de repetidas vezes escrever um for? Conheça essa novidade do Java 8 e nunca mais escreva uma iteração na sua vida!

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!