Ce face Stream.map
map(f) aplică funcția f pe fiecare element și pune rezultatul în noul stream. Numărul de elemente rămâne același; se schimbă doar valorile (și, eventual, tipul): un Stream<String> poate deveni Stream<Integer> cu map(String::length).
Funcția se scrie ca lambda (n -> n * 2) sau ca referință la metodă (String::toUpperCase, Produs::nume). Dacă rezultatul este un număr pe care vrei să-l aduni, mapToInt/mapToDouble îți dau direct sum() și average().
Parametri
| Parametru | Descriere |
|---|---|
transformare |
Funcția aplicată fiecărui element; ce returnează devine noul element. |
Ce returnează
Un Stream<R> cu rezultatele funcției, în aceeași ordine.
Exemple
Exemplul 1: Transformări simple
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> nume = List.of("ana", "mihai", "ioana");
System.out.println(nume.stream().map(String::toUpperCase).toList());
System.out.println(nume.stream().map(String::length).toList());
System.out.println(nume.stream().map(n -> "Dna/Dl " + n).toList());
}
}
Rezultat
[ANA, MIHAI, IOANA]
[3, 5, 5]
[Dna/Dl ana, Dna/Dl mihai, Dna/Dl ioana]
Exemplul 2: Din obiecte extragi un câmp
import java.util.List;
public class Main {
record Student(String nume, int nota) {}
public static void main(String[] args) {
List<Student> grupa = List.of(new Student("Ana", 9), new Student("Radu", 7), new Student("Ioana", 10));
List<String> doarNume = grupa.stream().map(Student::nume).toList();
System.out.println(doarNume);
grupa.stream()
.map(s -> s.nume() + ": " + (s.nota() >= 5 ? "promovat" : "restanță"))
.forEach(System.out::println);
}
}
Rezultat
[Ana, Radu, Ioana]
Ana: promovat
Radu: promovat
Ioana: promovat
Exemplul 3: Prețuri cu TVA
map se poate înlănțui: întâi calculul, apoi formatarea textului.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Double> preturiFaraTva = List.of(100.0, 45.5, 12.0);
preturiFaraTva.stream()
.map(p -> p * 1.21)
.map(p -> String.format("%.2f lei", p))
.forEach(System.out::println);
}
}
Rezultat
121.00 lei
55.06 lei
14.52 lei
Greșeli frecvente
- Folosești
mapcând funcția returnează o listă sau un stream. Obții unStream<List<T>>; pentru a „aplatiza” rezultatul foloseșteflatMap. - Pui în
mapo lambda care modifică obiectele și nu returnează nimic util.mapeste pentru transformări; pentru efecte (afișare) foloseșteforEach.
Comenzi înrudite
Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.Stream.flatMap: Transformă fiecare element într-un stream și lipește toate aceste stream-uri într-unul singur.Stream.mapToInt: Transformă elementele în numere primitive (int, long, double) și dă acces la sum(), average(), max().Function: O funcție care primește o valoare de tip T și returnează una de tip R; o apelezi cu apply.Stream.collect: Adună elementele într-un rezultat (listă, set, map, text) folosind un Collector, de obicei din clasa Collectors.