Ce face Collection.stream
stream() transformă orice colecție (listă, mulțime, coadă) într-un Stream: un „flux” de elemente pe care îl prelucrezi în pași: filter (păstrează doar unele), map (transformă), sorted, apoi o operație finală ca toList(), count() sau collect(...).
Stream-ul nu modifică colecția inițială: rezultatul este o colecție sau o valoare nouă. Un stream se poate folosi o singură dată; pentru o nouă prelucrare apelezi din nou stream().
parallelStream() poate împărți munca pe mai multe nuclee. Merită doar pentru colecții foarte mari și calcule grele; pentru programe obișnuite folosește stream().
Ce returnează
Un Stream<E> secvențial (sau paralel, pentru parallelStream).
Exemple
Exemplul 1: Filtrarea și transformarea unei liste
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> orase = List.of("Iași", "Cluj", "București", "Arad", "Constanța");
List<String> lungi = orase.stream()
.filter(o -> o.length() > 4)
.map(String::toUpperCase)
.sorted()
.toList();
System.out.println(lungi);
System.out.println("Lista inițială: " + orase);
}
}
Rezultat
[BUCUREȘTI, CONSTANȚA]
Lista inițială: [Iași, Cluj, București, Arad, Constanța]
Exemplul 2: Suma și media prețurilor dintr-o mulțime
import java.util.List;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Integer> preturi = new TreeSet<>(List.of(15, 40, 25, 40));
int total = preturi.stream().mapToInt(Integer::intValue).sum();
double medie = preturi.stream().mapToInt(Integer::intValue).average().orElse(0);
long scumpe = preturi.stream().filter(p -> p >= 25).count();
System.out.println("Prețuri distincte: " + preturi);
System.out.println("Total: " + total + " lei, medie: " + medie);
System.out.println("Produse de cel puțin 25 lei: " + scumpe);
}
}
Rezultat
Prețuri distincte: [15, 25, 40]
Total: 80 lei, medie: 26.666666666666668
Produse de cel puțin 25 lei: 2
Greșeli frecvente
- Refolosești același obiect
Streamde două ori. A doua operație aruncăIllegalStateException; apeleazăcolectie.stream()din nou. - Crezi că
filterșterge elemente din colecție. Colecția rămâne neschimbată; pentru ștergere foloseșteremoveIf. - Folosești
parallelStream()peste tot „ca să fie mai rapid”. Pentru colecții mici este de obicei mai lent.
Comenzi înrudite
Stream: Un șir de valori prelucrate pas cu pas: filtrezi, transformi, sortezi și aduni rezultatul, fără bucle scrise de mână.Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.Stream.map: Transformă fiecare element al stream-ului în altă valoare, eventual de alt tip.Collection.removeIf: Șterge din colecție toate elementele pentru care condiția dată este adevărată. Returnează true dacă s-a șters ceva.Arrays.stream: Creează un stream din elementele unui array, ca să le filtrezi, transformi sau aduni (sum, average, max) cu o singură expresie.Optional.stream: Transformă un Optional într-un Stream cu un element (dacă e plin) sau fără elemente (dacă e gol).