Ce face Function.andThen
f.andThen(g) creează o funcție nouă care aplică întâi f și apoi g pe rezultat: g(f(x)). Este ordinea naturală de citire: „curăță textul, apoi scrie-l cu majuscule”.
f.compose(g) face invers: aplică întâi g, apoi f: f(g(x)). Ordinea contează când operațiile nu sunt interschimbabile, de exemplu „adaugă 10” și „dublează”.
Funcțiile originale nu se schimbă; primești o funcție nouă, pe care o poți lega mai departe sau o poți da lui map.
Parametri
| Parametru | Descriere |
|---|---|
dupa |
Pentru andThen: funcția aplicată pe rezultat. |
inainte |
Pentru compose: funcția aplicată mai întâi, pe intrare. |
Ce returnează
O Function nouă, compusă din cele două.
Exemple
Exemplul 1: andThen față de compose
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> plus10 = x -> x + 10;
Function<Integer, Integer> dublu = x -> x * 2;
System.out.println("plus10.andThen(dublu): " + plus10.andThen(dublu).apply(5));
System.out.println("plus10.compose(dublu): " + plus10.compose(dublu).apply(5));
}
}
Rezultat
plus10.andThen(dublu): 30
plus10.compose(dublu): 20
Exemplul 2: Un lanț de curățare a textului
Numele scrise de utilizatori trec prin aceeași „conductă”: spații eliminate, majusculă la început, salut.
import java.util.List;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> curata = String::strip;
Function<String, String> majuscula = s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
Function<String, String> salut = s -> "Bună, " + s + "!";
Function<String, String> tot = curata.andThen(majuscula).andThen(salut);
List.of(" ana ", "MIHAI", " ioana").stream()
.map(tot)
.forEach(System.out::println);
}
}
Rezultat
Bună, Ana!
Bună, Mihai!
Bună, Ioana!
Greșeli frecvente
- Confunzi ordinea:
f.andThen(g)înseamnă „întâi f”,f.compose(g)înseamnă „întâi g”. - Încerci
andThenpe o lambda scrisă direct, fără tip:(x -> x + 1).andThen(...)nu compilează. Pune lambda într-o variabilă de tipFunctionmai întâi.
Comenzi înrudite
Function: O funcție care primește o valoare de tip T și returnează una de tip R; o apelezi cu apply.Function.identity: Funcția care returnează exact valoarea primită; utilă în toMap și groupingBy când elementul însuși e cheia sau valoarea.UnaryOperator: O Function în care intrarea și ieșirea au același tip (T → T); folosită de List.replaceAll și Stream.iterate.Predicate.and: Combină condiții: and (ambele adevărate), or (cel puțin una) și negate (condiția inversă).