Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 2 de 214/14 en el curso~15 min
Lecciones del módulo (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

Ejercicio#java.m7.l2.e1
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Ejercicio#java.m7.l2.e2
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Ejercicio#java.m7.l2.e3
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos