Ce face UnaryOperator
UnaryOperator<T> este o Function<T, T>: primește un T și returnează tot un T. Se apelează tot cu apply. Exemple: „scrie textul cu majuscule”, „mărește prețul cu 10%”.
Unele metode cer exact acest tip: list.replaceAll(UnaryOperator) înlocuiește fiecare element cu rezultatul operației, iar Stream.iterate(start, UnaryOperator) calculează următorul element din cel anterior. Pentru numere există IntUnaryOperator, fără împachetare.
Ce returnează
apply returnează o valoare de același tip cu intrarea.
Exemple
Exemplul 1: replaceAll cu un UnaryOperator
import java.util.ArrayList;
import java.util.List;
import java.util.function.UnaryOperator;
public class Main {
public static void main(String[] args) {
UnaryOperator<String> majuscule = String::toUpperCase;
List<String> orase = new ArrayList<>(List.of("iași", "cluj", "arad"));
orase.replaceAll(majuscule);
System.out.println(orase);
UnaryOperator<Double> scumpire = pret -> Math.round(pret * 1.10 * 100) / 100.0;
System.out.println(scumpire.apply(25.0));
}
}
Rezultat
[IAȘI, CLUJ, ARAD]
27.5
Exemplul 2: Stream.iterate: dublarea unei sume
Operatorul primește suma de anul trecut și o dă pe cea de anul acesta.
import java.util.function.UnaryOperator;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
UnaryOperator<Integer> dobanda = suma -> suma + suma / 10;
Stream.iterate(1000, dobanda)
.limit(5)
.forEach(s -> System.out.println(s + " lei"));
}
}
Rezultat
1000 lei
1100 lei
1210 lei
1331 lei
1464 lei
Greșeli frecvente
- Dai o
Function<String, String>luireplaceAll: nu compilează, deși face același lucru. Declari variabila caUnaryOperatorsau scrii lambda direct în apel. - Folosești
UnaryOperator<Integer>pentru calcule intense cu numere.IntUnaryOperatorevită împachetarea.
Comenzi înrudite
Function: O funcție care primește o valoare de tip T și returnează una de tip R; o apelezi cu apply.BinaryOperator: O funcție care combină două valori de același tip într-una (T, T → T); folosită de reduce, toMap și Map.merge.Stream.iterate: Creează un stream din formule: iterate pornește de la o valoare și aplică un pas, generate cere fiecare valoare unui Supplier.Function.identity: Funcția care returnează exact valoarea primită; utilă în toMap și groupingBy când elementul însuși e cheia sau valoarea.