Salt la conținutul principal
Modulul 7 · Lecția 2 din 214/14 în curs~15 min
Lecții din modul (2/2)

API Stream

Stream API în Java vă permite să procesați colecții de obiecte într-un mod declarativ, valorificând programarea funcțională. Un flux nu stochează date, ci transportă elemente dintr-o sursă (cum ar fi o listă sau o matrice) printr-o serie de operațiuni.

O conductă Stream este formată din trei părți:

  1. O sursă (de exemplu, list.stream())
  2. Zero sau mai multe operațiuni intermediare (care returnează un flux nou, de exemplu, filter, map)
  3. O operație terminală (care produce un rezultat final sau un efect secundar și închide fluxul, de exemplu, collect, forEach, reduce)

Operațiuni intermediare comune

Operațiile intermediare sunt leneșe: nu sunt executate până când nu este invocată o operație de terminal.

  • filter(Predicate): filtrează elementele pe baza unei condiții booleene.
  • map(Function): transformă fiecare element într-un alt obiect prin aplicarea unei funcții.
  • sorted(): sortează elementele fluxului.
Java
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

Operațiuni comune ale terminalelor

  • forEach(Consumer): efectuează o acțiune pentru fiecare element al fluxului.
  • collect(Collector): adună rezultatele fluxului într-un container (de exemplu, o listă folosind Collectors.toList()).
  • reduce(identity, BinaryOperator): combină elementele Stream într-o singură valoare cumulativă.
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Sums all numbers: 10

Încercați-l singur

Exercițiu#java.m7.l2.e1
Încercări: 0Se încarcă…

Completați codul utilizând fluxul de numere pentru a filtra numai numerele pare, colectați-le într-o nouă listă numită evens și tipăriți-l folosind System.out.println.

Se încarcă editorul...
Afișează indiciu

Începeți prin a apela `numbers.stream()`, adăugați `.filter(n -> n % 2 == 0)` și, în final, colectați cu `.collect(Collectors.toList())`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m7.l2.e2
Încercări: 0Se încarcă…

Utilizați fluxuri pentru a transforma toate numele din lista de nume în majuscule folosind harta și imprimați-le unul câte unul folosind forEach cu o referință de metodă.

Se încarcă editorul...
Afișează indiciu

Folosiți `.map(s -> s.toUpperCase())` urmat de operația de terminal `.forEach(System.out::println)`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m7.l2.e3
Încercări: 0Se încarcă…

Completați codul calculând suma tuturor numerelor din lista de numere folosind un Stream și operația de reducere a terminalului cu o valoare inițială de 0. Imprimați suma.

Se încarcă editorul...
Afișează indiciu

Folosiți `numbers.stream().reduce(0, (a, b) -> a + b)` și imprimați variabila rezultată.

Soluție disponibilă după 3 încercări