🔍 O que é UnaryOperator?
A interface UnaryOperator<T> faz parte do pacote java.util.function e é uma especialização da interface Function<T, R>, onde o tipo de entrada e saída são o mesmo.
É usada quando você quer aplicar uma transformação em um único valor e retornar um valor do mesmo tipo.
📘 Assinatura funcional
@FunctionalInterface
public interface UnaryOperator<T> {
T apply(T t);
}
🧪 Exemplos práticos
✅ Exemplo 1: Dobrar um número
UnaryOperator<Integer> dobrar = n -> n * 2;
System.out.println(dobrar.apply(5));// 10
Comentário: Aplica a função
n * 2no valor5.
✅ Exemplo 2: Converter texto para maiúsculas
UnaryOperator<String> maiusculo = s -> s.toUpperCase();
System.out.println(maiusculo.apply("java"));// JAVA
Comentário: Transforma a string em letras maiúsculas.
✅ Exemplo 3: Utilizando em List.replaceAll()
List<String> nomes = new ArrayList<>(Arrays.asList("joao", "maria", "ana"));
nomes.replaceAll(String::toUpperCase);
System.out.println(nomes);// [JOAO, MARIA, ANA]
Comentário:
replaceAllusa internamenteUnaryOperator<T>.
❌ Pegadinhas e erros comuns
UnaryOperator<Integer> erro = x -> "resultado: " + x;// ❌
Erro de compilação: o tipo de retorno é
String, mas o esperado éInteger.
UnaryOperator<Double> ident = x -> x;// ✅ válido, retorna o mesmo valor
Comentário: A identidade é válida como operador unário.
🎯 Dica para prova
UnaryOperator<T>=Function<T, T>.- Ideal para listas com
replaceAll,Stream.map, etc. - Prefira usar
UnaryOperatorquando não há conversão de tipo.
🧠 Quiz com 5 questões
1) O que faz a interface UnaryOperator<T>?
A) Recebe dois argumentos e retorna um
B) Recebe e retorna valores do mesmo tipo
C) Concatena strings
D) Sempre retorna void
2) Qual das opções abaixo é um exemplo válido de UnaryOperator<String>?
A) x -> x.length()
B) x -> x.toUpperCase()
C) x -> x + 1
D) x -> x.equals("abc")
3) Qual é o tipo de dado retornado pelo método apply() da interface UnaryOperator<T>?
A) void
B) int
C) boolean
D) T
4) Como você aplicaria UnaryOperator para inverter o sinal de um número?
A) n -> -n
B) n -> n++
C) n -> n.toString()
D) n -> "negativo"
5) Qual método de List aceita diretamente um UnaryOperator como argumento?
A) forEach
B) stream()
C) replaceAll
D) filter
✅ Gabarito com comentários
- B –
UnaryOperator<T>recebe e retorna o mesmo tipo - B –
toUpperCase()mantém o tipoString - D – O retorno de
apply()é do mesmo tipoT - A – Inverter o sinal de um número é feito com
-n - C –
List.replaceAll(UnaryOperator)aplica a função a todos os elementos
🧠 Resumo visual
| Interface | Entrada | Saída | Uso comum |
|---|---|---|---|
UnaryOperator<T> | T | T | Transformações simples |
| Equivalente a | Function<T, T> | Mesmo tipo de entrada/saída | |
| Exemplo | x -> x * 2 | Dobrar valores |