✅ 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>—Suppliernão recebe nenhum argumento - Não pode usar
returnsem valor ou instruções que retornamvoid
🧠 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
- C –
Supplier<T>não recebe argumentos, apenas fornece umT - D – O método da interface é
get() - B – Está gerando o valor constante
42três vezes - C –
Supplierdeve retornar algo compatível comT, ou erro de compilação - C – A única lambda válida que retorna
"Oi"sem argumentos
🎯 Resumo comparativo
| Interface | Entrada | Saída | Método principal |
|---|---|---|---|
Consumer<T> | T | void | accept(T t) |
Predicate<T> | T | boolean | test(T t) |
Function<T, R> | T | R | apply(T t) |
Supplier<T> | – | T | get() |