ForEach Java: entenda sintaxe e objetivos completos

Compartilhe

Avalie este artigo

4 minutos de leitura

O que é o Método forEach 

O método forEach, introduzido nas APIs de Collections e Streams a partir do Java 8, simplifica a iteração sobre elementos de uma coleção, executando uma ação específica para cada item. 

O nome forEach descreve exatamente a sua funcionalidade: caminhar por "cada" elemento da estrutura de dados. Enquanto o "for" remete aos tradicionais laços de repetição, o "each" enfatiza o tratamento individual, tornando a nomenclatura bastante direta. 

Banner promocional da Alura destacando até 35% de desconto em cursos de tecnologia. A mensagem reforça que a diferença entre potencial e resultado está no preparo, incentivando profissionais a se anteciparem às mudanças do mercado e investirem no desenvolvimento de novas habilidades. A imagem mostra uma pessoa usando fones de ouvido e há um botão com a chamada "Aproveitar agora" para começar a evoluir na carreira tech.

Quais são os objetivos do método forEach no Java? 

A chegada do método forEach trouxe uma alternativa aos laços explícitos tradicionais, como o for com contadores ou o while. Seus principais propósitos envolvem: 

  • Manipulação de Collections: Reduz a verbosidade ao executar operações em listas, conjuntos e mapas. 
  • Integração com Streams: Permite o processamento de dados e abre caminhos para operações em paralelo, aproveitando melhor os múltiplos núcleos do processador. 
  • Tratamento de dados: Facilita rotinas como exibição, filtragem e pequenas transformações em elementos agregados. 
  • Legibilidade do código: Ajuda a manter o desenvolvimento focado no "o que" o código deve fazer, e não no "como" controlar o índice do laço. 

Como é a sintaxe do forEach? 

A estrutura básica para aplicar o método segue este padrão: 

arrayOuColecao.forEach(elemento -> { 
  // Ação a ser executada para cada elemento 
});

A leitura lógica dessa instrução funciona assim: "para cada 'elemento' contido em 'arrayOuColecao', execute a 'ação' que está definida dentro do bloco". 

Comparação com laço enhanced-for (Java 5) 

Para fins de contraste, o modelo do laço for-each tradicional (ou enhanced-for) possui a seguinte estrutura: 

for (Tipo variavel : arrayOuColecao) { 
// Código a ser executado 
}

Existe uma distinção estrutural importante entre esse laço tradicional do Java 5 e o método forEach() introduzido no Java 8. O primeiro atua como uma estrutura de controle da própria linguagem, enquanto o segundo funciona como um método que recebe expressões lambda ou referências de método. 

Embora ambos os recursos tenham o propósito de percorrer elementos, o método forEach() das coleções modernas oferece capacidades adicionais. O formato tradicional do Java 5 executa o rastreamento dos itens estritamente de modo sequencial.  

Já o método forEach() trabalha em conjunto com a API de Streams, viabilizando o processamento paralelo quando a estrutura é convertida para um parallelStream

Exemplos práticos de uso do forEach 

Vamos ver como aplicar o método em diferentes cenários do cotidiano do desenvolvimento? 

Iteração e exibição de itens em uma lista 

List<String> listaDaFeira = Arrays.asList("Abobrinha", "Berinjela", "Cenoura", "Ervilha"); 
listaDaFeira.forEach(legumes -> System.out.println(legumes));

Utilizando forEach com a interface Map 

Map<String, Integer> mapa = new HashMap<>(); 
mapa.put("Vítor", 1); 
mapa.put("Rosana", 2); 
mapa.put("Suellen", 3); 
mapa.forEach((chave, valor) ->  
   System.out.println(chave + " : " + valor));

Executando remoções condicionais e exibição com Method Reference 

List<String> animaisVet = new ArrayList<>( 
Arrays.asList("gatinhos", "gato", "peixinhos", "peixe") 
); 
// remove os elementos que possuem mais de 6 caracteres 
animaisVet.removeIf(animal -> animal.length() > 6); 
// exibe os elementos restantes 
animaisVet.forEach(System.out::println); 
/* Saída: gato peixe */

Filtrando dados através de Streams antes do forEach 

List<Integer> numeros = Arrays.asList( 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
); 
// filtra apenas os números pares 
numeros.stream() 
    .filter(numero -> numero % 2 == 0) 
    .forEach(numero -> System.out.println(numero)); 
/* Saída: 2 4 6 8 10 */

Conclusão 

Dominar recursos como o forEach, as expressões lambda e as Streams é apenas o começo para construir aplicações limpas e bem estruturadas.

Se você quer ir além da sintaxe e se preparar para os desafios reais do mercado, o caminho é consolidar seu conhecimento com foco no que as empresas realmente buscam. 

Na Alura, a Carreira em Desenvolvimento Back-End Java oferece uma jornada totalmente organizada e direto ao ponto. São 45 cursos e mais de 440 horas de conteúdo que guiam você desde a base da programação até tópicos avançados de arquitetura: 

  • Fundamentos e Lógica: Construa uma base sólida de pensamento computacional
  • Aplicações Web com Spring Boot: Aprenda a desenvolver APIs REST seguras, documentadas e prontas para deploy. 
  • Arquitetura Avançada e Microsserviços: Domine mensageria com RabbitMQ, conteinerização com Docker, pipelines de CI/CD no GitHub Actions e computação em nuvem na AWS
  • Portfólio Prático: Desenvolva projetos reais para demonstrar sua autonomia técnica em processos seletivos. 

Continue firme nos estudos! 

Avalie este artigo

Veja outros artigos sobre Programação