Passer au contenu principal
eLearner.app
Module 7 · Leçon 2 sur 214/14 dans le cours~15 min
Leçons du module (2/2)

Stream API

Le Stream API in Java consentono di elaborare collezioni di oggetti in modo dichiarativo, sfruttando la programmazione funzionale. Uno Stream non memorizza dati, bensì trasporta gli elementi da una sorgente (come una lista o un array) attraverso una pipeline di operazioni.

Una pipeline di Stream si compone di tre parti:

  1. Una sorgente (es. list.stream())
  2. Zero o più operazioni intermedie (che restituiscono un nuovo Stream, es. filter, map)
  3. Un'operazione terminale (che produce un risultato finale o un effetto collaterale e chiude lo Stream, es. collect, forEach, reduce)

Operazioni Intermedie Comuni

Le operazioni intermedie sono "pigre" (lazy): non vengono eseguite finché non viene invocata un'operazione terminale.

  • filter(Predicate): filtra gli elementi in base a una condizione booleana.
  • map(Function): trasforma ciascun elemento in un altro oggetto applicando una funzione.
  • sorted(): ordina gli elementi dello Stream.
Code
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"

Operazioni Terminali Comuni

  • forEach(Consumer): esegue un'azione per ogni elemento dello Stream.
  • collect(Collector): raccoglie i risultati dello Stream in un contenitore (es. una lista tramite Collectors.toList()).
  • reduce(identity, BinaryOperator): combina gli elementi dello Stream in un singolo valore cumulativo.
Code
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Somma tutti i numeri: 10

Prova tu

Exercice#java.m7.l2.e1
Tentatives : 0Chargement…

Completa il codice utilizzando lo Stream delle risorse per filtrare solo i numeri pari, raccoglierli in una nuova List denominata evens e stamparla tramite System.out.println.

Chargement de l'éditeur…
Afficher l'indice

Inizia chiamando `numbers.stream()`, aggiungi `.filter(n -> n % 2 == 0)` e infine accumula con `.collect(Collectors.toList())`.

Solution disponible après 3 tentatives

Exercice#java.m7.l2.e2
Tentatives : 0Chargement…

Usa gli Stream per trasformare tutti i nomi all'interno della lista names in lettere maiuscole usando map, e stampali a schermo uno alla volta usando forEach con System.lineSeparator o un method reference.

Chargement de l'éditeur…
Afficher l'indice

Usa `.map(s -> s.toUpperCase())` seguito dall'operazione terminale `.forEach(System.out::println)`.

Solution disponible après 3 tentatives

Exercice#java.m7.l2.e3
Tentatives : 0Chargement…

Completa il codice calcolando la somma di tutti i numeri presenti nella lista numbers utilizzando uno Stream e l'operazione terminale reduce con valore iniziale 0. Stampa il risultato.

Chargement de l'éditeur…
Afficher l'indice

Usa `numbers.stream().reduce(0, (a, b) -> a + b)` e stampa la variabile contenente il risultato.

Solution disponible après 3 tentatives