✅ Use the built-in interface java.util.function.Consumer


🔍 O que é um Consumer<T>?

@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);
}
  • Um Consumer<T> aceita um argumento do tipo T e 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

  1. B – Consumer aceita 1 argumento e retorna void
  2. Baccept() é o único método abstrato
  3. C – Apenas essa imprime corretamente
  4. C – Imprime Hello no console
  5. BandThen() encadeia dois Consumers

🎯 Resumo

  • Consumer<T> é uma interface funcional que executa ações com o tipo T, sem retornar nada
  • Muito útil com forEach, andThen e expressões lambda
  • Pode ser combinado para executar múltiplas ações

Deixe um comentário