Retour au cours

Approfondissement de la Java Streams API (Filter, Map, Reduce)

Maîtrise de Java : De Zéro à Développeur Professionnel (Un parcours en 50 leçons)

Leçon 49 : Approfondissement de la Java Streams API

La Streams API (Java 8+) est l'une des fonctionnalités les plus puissantes pour traiter des séquences de données (collections ou tableaux) dans un style fonctionnel et déclaratif.

1. Qu'est-ce qu'un Stream ?

Un stream est une séquence d'éléments qui prend en charge des opérations d'agrégation séquentielles et parallèles. Crucialement, un stream :

  • N'est pas une structure de données : Il ne stocke pas de données ; il achemine les données d'une source (comme une List).
  • Est fonctionnel : Les opérations ne modifient pas les données sources.
  • Est paresseux (lazy) : Les opérations ne sont exécutées que lorsqu'une opération terminale est appelée.

2. Structure d'un pipeline de Stream

Un pipeline de stream se compose de trois parties :

  1. Source : Une collection, un tableau ou une ressource I/O (list.stream()).
  2. Opérations intermédiaires : Transforment le stream et retournent un nouveau stream (ex: filter, map, sorted). Celles-ci sont paresseuses.
  3. Opération terminale : Produit un résultat ou un effet secondaire (ex: forEach, collect, reduce, count). Cela déclenche l'exécution.

3. Opérations intermédiaires de base

  • filter() : Sélectionne les éléments correspondant à une condition donnée (Predicate).
  • map() : Transforme chaque élément en une nouvelle valeur (Function).
  • sorted() : Trie les éléments.

java List words = List.of("apple", "banana", "cat", "dog");

List result = words.stream() // 1. Source .filter(w -> w.length() > 3) // 2. Intermédiaire (Garde 'apple', 'banana') .map(String::toUpperCase) // 2. Intermédiaire (APPLE, BANANA) .collect(Collectors.toList()); // 3. Terminale (Met les résultats dans une nouvelle List)

System.out.println(result); // Sortie : [APPLE, BANANA]

4. L'opération reduce()

reduce() combine tous les éléments du stream pour produire un résultat unique (ex: somme, produit, concaténation).

java List nums = List.of(1, 2, 3, 4); // Somme = 1 + 2 + 3 + 4 int sum = nums.stream().reduce(0, (a, b) -> a + b); System.out.println(sum); // Sortie : 10