Middle
Pentru ce sunt folosiți stream-urile în noua versiune de Java?
sobes.tech AI
Răspuns de la AI
Fluxurile în Java 8+ sunt utilizate pentru procesarea declarativă a secvențelor de date. Ele permit efectuarea de operații funcționale asupra colecțiilor (liste, seturi), array-urilor sau altor surse de date într-un stil de tip pipeline.
Principalele avantaje ale utilizării fluxurilor:
- Stil declarativ: Permite descrierea "ce" trebuie făcut cu datele, nu "cum". Acest lucru face ca codul să fie mai ușor de citit și înțeles.
- Calcul întârziat: Operațiile sunt procesate doar atunci când este necesar, ceea ce poate îmbunătăți performanța, mai ales cu volume mari de date.
- Procesare paralelă: Fluxurile pot fi ușor paralelizate (folosind
parallelStream()), ceea ce permite utilizarea eficientă a procesoarelor multi-core. - Reducerea codului boilerplate: Înlocuiesc buclele tradiționale și iteratorii cu construcții mai expresive și compacte.
- Imutabilitate: Fluxurile nu modifică sursa de date originală.
Exemple de operații comune cu fluxurile:
- Filtrare:
filter()- selecția elementelor după o condiție. - Transformare (mapare):
map()- transformarea fiecărui element. - Sortare:
sorted()- sortarea elementelor. - Elemente unice:
distinct()- eliminarea duplicatelor. - Grupare:
collect(Collectors.groupingBy(...))- gruparea elementelor după o caracteristică. - Statistici/Aggregare:
count(),sum(),average(),max(),min(),reduce()- operații de agregare. - Colectare în colecție:
collect(Collectors.toList()),collect(Collectors.toSet())- colectarea rezultatelor în colecție.
Exemplu de utilizare:
// Filtrare și transformare a unei liste de șiruri de caractere folosind fluxuri
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Crearea unui flux din listă
.filter(name -> name.startsWith("A")) // Filtrare: păstrează doar numele care încep cu "A"
.map(String::toUpperCase) // Transformare: fiecare nume în majuscule
.collect(Collectors.toList()); // Colectarea rezultatului într-o listă nouă
System.out.println(filteredNames); // Ieșire: [ALICE]