✅ Use a built-in Function<T, R> da java.util.function
🔍 O que é a interface Function<T, R>?
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
- Recebe um argumento do tipo
T - Retorna um resultado do tipo
R - Muito utilizada em transformações de dados e em operações de mapeamento (
map()em Streams)
✅ Exemplo básico de Function
Function<String, Integer> tamanho = s -> s.length();
System.out.println(tamanho.apply("Java")); // 4
Comentário (linha 1):
Cria uma função que recebe uma String e retorna seu tamanho (Integer)
✅ Function com Streams (mapeamento)
List<String> nomes = Arrays.asList("Ana", "Bruno", "Carlos");
List<Integer> tamanhos = nomes.stream()
.map(s -> s.length())
.collect(Collectors.toList());
System.out.println(tamanhos); // [3, 5, 6]
Comentário (linha 4):
O map() usa uma Function<String, Integer> para transformar os elementos da Stream.
🔁 Encadeando Functions com andThen() e compose()
Function<String, String> toUpper = s -> s.toUpperCase();
Function<String, String> adicionarExclamacao = s -> s + "!";
Function<String, String> finalFunction = toUpper.andThen(adicionarExclamacao);
System.out.println(finalFunction.apply("java")); // JAVA!
Comentário (linha 4):andThen() aplica toUpper primeiro, depois adicionarExclamacao.
Function<String, String> finalFunction2 = toUpper.compose(adicionarExclamacao);
System.out.println(finalFunction2.apply("java")); // JAVA!
Comentário (linha 1):compose() aplica adicionarExclamacao antes, depois toUpper.
❌ Erros comuns com Function
Function<String, String> f = s -> System.out.println(s);// ❌ Não compila (não retorna String)
Comentário:
O println retorna void, mas Function precisa retornar R.
Function<String, Integer> f = s -> s;// ❌ Erro: retorna String, não Integer
Comentário:
O tipo de retorno declarado não bate com o retorno real da lambda.
📌 Dicas para a prova
Function<T, R>é usada quando você transforma um valorandThen()executa uma Function após a atualcompose()executa uma Function antes da atual- Tipos genéricos precisam coincidir entre os encadeamentos (
andThenecompose)
🧠 Quiz com 5 questões
1) O que faz a interface Function<T, R>?
A) Recebe T, retorna R
B) Recebe R, retorna T
C) Retorna boolean
D) Recebe dois argumentos
2) Qual método é obrigatório em uma Function?
A) run()
B) apply()
C) accept()
D) get()
3) O que faz o método andThen() de uma Function?
A) Aplica outra Function antes da atual
B) Aplica outra Function após a atual
C) Executa em paralelo
D) Nada
4) Dado Function<String, Integer> f = s -> s.length();, qual é o valor de f.apply("abcde")?
A) “abcde”
B) 4
C) 5
D) null
5) O que ocorre se uma Function não retornar valor?
A) Compila
B) Lança exceção
C) Erro de compilação
D) Funciona normalmente
✅ Gabarito comentado
- A – Function sempre recebe um
Te retorna umR - B –
apply()é o método abstrato da interface - B –
andThenaplica a Function adicional depois - C – A String
"abcde"tem tamanho 5 - C – Function precisa retornar algo. Se não retornar, erro de compilação
🎯 Resumo
| Interface | Entrada | Saída | Método principal |
|---|---|---|---|
Consumer<T> | T | void | accept(T t) |
Function<T,R> | T | R | apply(T t) |
Predicate<T> | T | boolean | test(T t) |