Lambda em Java
Passe uma ação curta a forEach com uma seta. Em Cue.java, mantenha a classe pública Cue, importe java.util.ArrayList, guarde "oak" numa lista tipada e chame names.forEach(n -> System.out.println(n));. Compile com javac Cue.java e execute java Cue. A tela deve mostrar oak. Uma segunda demo acrescenta "pine" para a tela mostrar oak, depois pine. Deixe Streams opcional para a página seguinte. Esta lição é uma lambda passada a forEach, não uma demo Generics com get(0) e não args de linha de comando.
Um elemento, uma impressão lambda
Abra Cue.java. Mantenha o nome da classe pública Cue. Apague demos restantes de Generics Bin, execuções Program Arguments Flag, prompts Scanner Box e histórico Shelf se enterrarem a história lambda. O programa não deve esperar digitação nem exigir palavras de lançamento.
Acrescente o import no topo:
import java.util.ArrayList;
Dentro de Cue.main, construa uma lista tipada, acrescente uma palavra e passe uma lambda a forEach:
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.forEach(n -> System.out.println(n));
A parte n -> System.out.println(n) é a lambda. n é o nome do parâmetro para um elemento. A seta -> aponta para o corpo que corre para esse elemento. forEach chama esse corpo uma vez para "oak". A tela mostra oak.
import java.util.ArrayList;
public class Cue {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.forEach(n -> System.out.println(n));
}
}
Na pasta que contém Cue.java, execute javac Cue.java. Quando chaves e pontos e vírgula coincidem, javac não escreve linha própria. Depois execute java Cue — não java Cue.java. Mantenha uma só classe pública para o nome corresponder a Cue.
Percorra a execução uma vez. Java começa em Cue.main. A lista guarda "oak". forEach recebe a lambda. No primeiro (e único) elemento, n é "oak" e println escreve oak. Nada chama get(0) nesta forma de ensino. Nada imprime 3 de uma demo Integer Bin. Nada lê args[0].
Diga a regra de principiante olhando para a tela: forEach percorre a lista; a lambda é a ação por elemento; a seta separa o parâmetro do corpo. Não invente pipelines Streams nesta página. Streams aguarda a próxima lição opcional. Não substitua a lambda por um método nomeado completo neste ficheiro de ensino — mantenha a forma com seta.
Se ainda vir só oak via names.get(0) num ficheiro Bin restante, mude para Cue e mantenha a linha forEach. Se javac rejeitar a seta, confirme que digitou -> e que a lambda está dentro de forEach(...).
Dois elementos, a mesma lambda
Mantenha a mesma classe pública Cue. Acrescente uma segunda palavra antes de forEach:
names.add("oak");
names.add("pine");
names.forEach(n -> System.out.println(n));
Compile de novo com javac Cue.java e execute java Cue. A tela mostra oak, depois pine. forEach corre a lambda uma vez por elemento em ordem. O corpo da lambda não muda. Só mudou o comprimento da lista.
import java.util.ArrayList;
public class Cue {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.add("pine");
names.forEach(n -> System.out.println(n));
}
}
Percorra a execução uma vez. Primeira chamada: n é "oak", imprima oak. Segunda chamada: n é "pine", imprima pine. Mantenha as duas demos como duas formas de ensino. Primeiro prove uma impressão lambda com uma palavra. Depois prove a mesma lambda com dois elementos. Ambas partilham import, lista tipada e n -> System.out.println(n).
Se imprimir a lista inteira com println(names) em vez de forEach, vê colchetes e vírgulas — é hábito diferente. Esta página mantém uma impressão por elemento pela lambda.
Lambda não é só Generics nem Streams
Os generics nomearam o tipo de elemento em ArrayList<String>. A lambda dá a forEach uma ação curta sem escrever um método nomeado separado nesta página. Streams encadeará mais passos da lista numa página opcional posterior. Não misture esses três papéis num só ficheiro de principiante hoje.
oak aqui é um elemento da lista visitado por forEach. Não é args[0] do Flag nem resposta de Scanner. Quando um ficheiro Bin restante ainda imprime só get(0), deixe-o como histórico e mantenha a linha forEach do Cue. Quando um ficheiro Flag ainda exige java Flag oak, deixe esse hábito de lançamento de lado e execute java Cue simples.
Sem a seta, javac não trata a ação como lambda. Sem forEach, a lambda não tem onde correr nesta forma de ensino. Mantenha as duas peças juntas enquanto pratica. Mantenha sintaxe Streams como .stream().map fora desta página até essa lição, mesmo que tenha visto a palavra Stream noutro sítio.
Verificações da pasta antes de Streams
Liste a pasta após compilação bem-sucedida. Deve ver Cue.java e Cue.class juntos. Edite o código, guarde, execute javac Cue.java, depois java Cue. Um .class antigo pode mostrar ecrã velho de uma linha se saltar compilação depois de acrescentar "pine".
Se javac reclamar de classes públicas duplicadas, mantenha só Cue pública. Se a tela mostrar [oak, pine] numa linha, imprimiu o objeto lista — volte a forEach com println dentro da lambda. Se nada imprimir, confirme que add correu antes de forEach.
Não cole get(0) do Bin como substituto da lambda nesta página. Não cole palavras de lançamento Flag no comando de execução. O trabalho lambda opcional é forEach com corpo em seta.
Antes de Streams opcional
Pode manter a classe pública Cue, importar ArrayList, acrescentar "oak", chamar names.forEach(n -> System.out.println(n));, ver oak, depois acrescentar "pine" e ver oak depois pine. Compile com javac Cue.java e execute java Cue. A página opcional seguinte é Streams.
Mantenha as demos Cue para um par lambda claro. Mantenha ficheiros Generics Bin fora desta página quando praticar forEach. Mantenha ficheiros Program Arguments Flag fora desta página quando praticar forEach. Mantenha trabalho Streams fora desta página até essa lição. Esses hábitos são o checkpoint antes de avançar. Quando o ecrã de uma palavra mostra oak ou o de duas palavras mostra oak depois pine, Lambda fez o seu trabalho nesta lição e está pronto para Streams se continuar o caminho opcional.
Última passagem na pasta: um só Cue público, import presente, ArrayList<String> tipada, forEach com n -> System.out.println(n), sem espera Scanner, sem palavras de lançamento obrigatórias. Execute outra vez javac Cue.java e java Cue na demo aberta. Se a tela ainda mostrar oak ou oak depois pine, a forma Lambda está sólida e o curso pode passar a Streams opcional na página seguinte. Prefira um hábito forEach claro por leitura para cada passagem ensinar o mesmo mapa.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo