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

Les Stream API en Java permettent de traiter des collections d'objets de manière déclarative, en tirant parti de la programmation fonctionnelle. Un Stream ne stocke pas de données, mais transporte les éléments d'une source (comme une liste ou un tableau) à travers un pipeline d'opérations.

Un pipeline de Stream se compose de trois parties :

  1. Une source (ex. list.stream())
  2. Zéro ou plusieurs opérations intermédiaires (qui renvoient un nouveau Stream, ex. filter, map)
  3. Une opération terminale (qui produit un résultat final ou un effet secondaire et ferme le Stream, ex. collect, forEach, reduce)

Opérations Intermédiaires Courantes

Les opérations intermédiaires sont "paresseuses" (lazy) : elles ne sont pas exécutées tant qu'une opération terminale n'est pas invoquée.

  • filter(Predicate) : filtre les éléments en fonction d'une condition booléenne.
  • map(Function) : transforme chaque élément en un autre objet en appliquant une fonction.
  • sorted() : trie les éléments du 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"

Opérations Terminales Courantes

  • forEach(Consumer) : exécute une action pour chaque élément du Stream.
  • collect(Collector) : recueille les résultats du Stream dans un conteneur (ex. une liste via Collectors.toList()).
  • reduce(identity, BinaryOperator) : combine les éléments du Stream en une seule valeur cumulative.
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

À toi de jouer

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

Complétez le code en utilisant le Stream des ressources pour filtrer uniquement les nombres pairs, les recueillir dans une nouvelle List nommée evens et l'afficher avec System.out.println.

Chargement de l'éditeur…
Afficher l'indice

Commencez par appeler `numbers.stream()`, ajoutez `.filter(n -> n % 2 == 0)` et enfin accumulez avec `.collect(Collectors.toList())`.

Solution disponible après 3 tentatives

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

Utilisez les Streams pour transformer tous les noms de la liste names en lettres majuscules à l'aide de map, et affichez-les à l'écran un par un en utilisant forEach avec System.lineSeparator ou une référence de méthode.

Chargement de l'éditeur…
Afficher l'indice

Utilisez `.map(s -> s.toUpperCase())` suivi de l'opération terminale `.forEach(System.out::println)`.

Solution disponible après 3 tentatives

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

Complétez le code en calculant la somme de tous les nombres présents dans la liste numbers à l'aide d'un Stream et de l'opération terminale reduce avec une valeur initiale de 0. Affichez le résultat.

Chargement de l'éditeur…
Afficher l'indice

Utilisez `numbers.stream().reduce(0, (a, b) -> a + b)` et affichez la variable contenant le résultat.

Solution disponible après 3 tentatives