ForEach Java: entenda sintaxe e objetivos completos

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.
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!





![Para que serve o String[] args em Java?](https://cdn-wcsm.alura.com.br/2025/04/cap-3.png)

