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 :
- Source : Une collection, un tableau ou une ressource I/O (
list.stream()). - Opérations intermédiaires : Transforment le stream et retournent un nouveau stream (ex:
filter,map,sorted). Celles-ci sont paresseuses. - 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<String> words = List.of("apple", "banana", "cat", "dog");
List<String> 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<Integer> 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