Supplier

Use a built-in Supplier<T> da java.util.function


🔍 O que é Supplier<T>?

@FunctionalInterface
public interface Supplier<T> {
T get();
}
  • Não recebe argumentos
  • Retorna um valor do tipo T
  • É muito útil para fornecer (suprir) valores sob demanda — como uma fábrica de objetos, números aleatórios, datas, etc.

Exemplo básico de Supplier

Supplier<String> saudacao = () -> "Olá, mundo!";

System.out.println(saudacao.get()); // Olá, mundo!

Comentário (linha 1):
A lambda não recebe nenhum argumento, apenas retorna a String "Olá, mundo!".


Supplier com objetos

Supplier<LocalDate> dataAtual = () -> LocalDate.now();

System.out.println(dataAtual.get()); // Data do dia atual

Comentário (linha 1):
Útil para gerar valores dinâmicos como datas, UUIDs, etc.


Supplier com Streams (gerando valores infinitos)

Stream<Double> aleatorios = Stream.generate(() -> Math.random());

aleatorios.limit(5).forEach(System.out::println);

Comentário (linha 1):
Stream.generate usa Supplier para criar valores indefinidamente. Aqui limitamos a 5.


Erros comuns com Supplier

Supplier<String> s = (x) -> "Oi"; 
// ❌ Não compila: Supplier não aceita parâmetros

Comentário:
O método get() de Supplier não recebe parâmetros, então x é inválido.

Supplier<String> s = () -> System.out.println("oi"); 
// ❌ Erro: println retorna void

Comentário:
O tipo de retorno da lambda deve ser compatível com T. Aqui o retorno é void, não String.


📌 Dicas para a prova

  • Supplier<T> serve para gerar valores sem entrada
  • Muito usado com Stream.generate()
  • Não confundir com Function<T,R>Supplier não recebe nenhum argumento
  • Não pode usar return sem valor ou instruções que retornam void

🧠 Quiz com 5 questões

1) O que representa Supplier<T>?
A) Recebe T, retorna void
B) Recebe T, retorna R
C) Não recebe nada, retorna T
D) Retorna boolean


2) Qual método é obrigatório em um Supplier<T>?
A) accept()
B) test()
C) apply()
D) get()


3) O que faz o código Stream.generate(() -> 42).limit(3).forEach(System.out::println);?
A) Gera 3 valores aleatórios
B) Imprime 42 três vezes
C) Não compila
D) Gera números aleatórios


4) O que acontece se um Supplier não retornar valor?
A) Compila normalmente
B) Retorna null
C) Erro de compilação
D) Retorna void


5) Qual alternativa está correta para criar um Supplier<String> válido?
A) () -> {}
B) (x) -> "Oi"
C) () -> "Oi"
D) x -> "Oi"


Gabarito comentado

  1. CSupplier<T> não recebe argumentos, apenas fornece um T
  2. D – O método da interface é get()
  3. B – Está gerando o valor constante 42 três vezes
  4. CSupplier deve retornar algo compatível com T, ou erro de compilação
  5. C – A única lambda válida que retorna "Oi" sem argumentos

🎯 Resumo comparativo

InterfaceEntradaSaídaMétodo principal
Consumer<T>Tvoidaccept(T t)
Predicate<T>Tbooleantest(T t)
Function<T, R>TRapply(T t)
Supplier<T>Tget()

Deixe um comentário