🔍 O que é um Consumer<T>?
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
- Um
Consumer<T>aceita um argumento do tipoTe não retorna nada (void). - Serve para executar alguma ação com um dado, como imprimir, modificar, gravar etc.
- Muito comum com
forEach()em coleções.
✅ Exemplo básico de Consumer
Consumer<String> imprimir = s -> System.out.println(s);
imprimir.accept("Olá!"); // Olá!
Comentário (linha 1):
O Consumer recebe uma String e a imprime.
✅ Consumer com List e forEach()
List<String> nomes = Arrays.asList("Ana", "Bruno", "Carlos");
nomes.forEach(nome -> System.out.println("Nome: " + nome));
// Nome: Ana
// Nome: Bruno
// Nome: Carlos
Comentário (linha 3):
A função lambda passada ao forEach() é um Consumer<String>.
🔄 Consumer com método andThen()
- Permite encadear dois Consumers para executar ações em sequência.
Consumer<String> maiusculo = s -> System.out.print(s.toUpperCase() + " ");
Consumer<String> exclamar = s -> System.out.print("!");
Consumer<String> combinado = maiusculo.andThen(exclamar);
combinado.accept("java"); // JAVA !
Comentário (linha 6):
Executa maiusculo.accept() seguido de exclamar.accept().
❌ Exemplos incorretos
Consumer<String> c = s -> return;// ❌ Erro: 'return' fora de contexto
Consumer<String> c = s -> s.toUpperCase();// ❌ Erro: não faz nada com o resultado
Consumer<Integer> c = i -> System.out.println(i);
c.accept("texto");// ❌ Erro de compilação: tipo incorreto
🧠 Quiz com 5 questões
1) O que faz a interface Consumer<T>?
A) Aceita dois argumentos e retorna void
B) Aceita um argumento e retorna void
C) Aceita um argumento e retorna boolean
D) Não aceita argumentos
2) Qual é o método funcional da interface Consumer?
A) apply()
B) accept()
C) execute()
D) consume()
3) Qual dessas expressões é válida?
A) Consumer<String> c = s -> return s.length();
B) Consumer<String> c = s -> s.length();
C) Consumer<String> c = s -> System.out.println(s);
D) Consumer<String> c = () -> System.out.println("oi");
4) O que acontece ao usar Consumer<String> c = s -> System.out.println(s); c.accept("Hello");?
A) Compila, mas nada acontece
B) Não compila
C) Exibe “Hello”
D) Exibe erro em tempo de execução
5) O método andThen() de um Consumer permite:
A) Executar dois Consumers em paralelo
B) Criar um novo Consumer que executa ambos em sequência
C) Negar um Consumer
D) Aplicar um Predicate no final
✅ Gabarito comentado
- B – Consumer aceita 1 argumento e retorna void
- B –
accept()é o único método abstrato - C – Apenas essa imprime corretamente
- C – Imprime
Hellono console - B –
andThen()encadeia dois Consumers
🎯 Resumo
Consumer<T>é uma interface funcional que executa ações com o tipoT, sem retornar nada- Muito útil com
forEach,andThene expressões lambda - Pode ser combinado para executar múltiplas ações