Stream API în Java — map, filter, collect, reduce
In this tutorial, you'll learn about Stream API în Java. We cover key concepts, practical examples, and best practices.
Stream API este o facilitate introdusă în Java 8 care permite procesarea funcțională a colecțiilor într-un stil declarativ, folosind operații precum map, filter, collect și reduce pentru a transforma și agrega date fără bucle explicite.
The Problem
Procesarea colecțiilor cu bucle for clasice produce cod verbose, greu de citit și predispus la erori de indexare. Acest quick-fix îți arată cum să folosești Stream API pentru un cod mai concis și expresiv.
The Wrong Way
List<String> names = new ArrayList<>();
for (Person p : people) {
if (p.getAge() >= 18) {
names.add(p.getName().toUpperCase());
}
}
Output:
[ANA, MIHAI, ELENA] // dar codul e verbose și mutabil
The Right Way
import java.util.stream.Collectors;
List<String> names = people.stream()
.filter(p -> p.getAge() >= 18)
.map(p -> p.getName().toUpperCase())
.collect(Collectors.toList());
Output:
[ANA, MIHAI, ELENA]
Step-by-Step Fix
1. Creează un stream
collection.stream() // pentru colecții
Stream.of("a", "b", "c") // direct
Arrays.stream(array) // din array-uri
2. Lanțuiește operații intermediare
.filter(p -> p.getAge() >= 18) // filtrează elemente
.map(p -> p.getName()) // transformă fiecare element
.sorted() // sortează
.distinct() // elimină duplicatele
3. Termină cu o operație finală
.collect(Collectors.toList()) // adună într-o listă
.reduce(0, Integer::sum) // reduce la o singură valoare
.forEach(System.out::println) // procesează fiecare element
.count() // numără elementele
Prevention Tips
- Streamurile nu pot fi reutilizate după o operație finală — creează un stream nou
- Folosește
parallelStream()doar când operațiile sunt independente și setul de date e mare - Evită efectele secundare în lambde — streamurile ar trebui să fie fără stare
Common Mistakes
- Modificarea sursei în timpul procesării — aruncă
ConcurrentModificationException. - Folosirea lui
parallelStream()pe colecții mici — overhead-ul e mai mare decât beneficiul. - Neglijarea operației finale — fără o operație terminală, streamul nu se execută (lazy evaluation).
FAQ
Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Java pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro