Skip to content

Stream API în Java — map, filter, collect, reduce

DodaTech Updated 2025-01-15 2 min read

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

  1. Modificarea sursei în timpul procesării — aruncă ConcurrentModificationException.
  2. Folosirea lui parallelStream() pe colecții mici — overhead-ul e mai mare decât beneficiul.
  3. Neglijarea operației finale — fără o operație terminală, streamul nu se execută (lazy evaluation).

FAQ

### Ce este Stream API în Java?

Stream API este o abstracție pentru procesarea secvențelor de date într-un stil funcțional, cu operații lazy și pipeline-uri compozabile.

Care e diferența dintre map și flatMap?

map transformă fiecare element într-un alt element. flatMap transformă fiecare element într-un stream și apoi concatenează rezultatele.

Ce face Collectors.toList()?

Adună elementele streamului într-o nouă listă mutabilă. Există variante pentru toate tipurile de colecții.

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