21. Streams et l'API Stream en Java

L'API Stream en Java est une approche moderne et fonctionnelle du traitement des séquences d'éléments. Introduite dans Java 8, l'API Stream représente un changement majeur dans la manière dont les développeurs peuvent écrire du code concis et lisible pour manipuler des collections de données. Dans ce chapitre, nous explorerons la puissance de Streams, des concepts de base aux techniques avancées.

Présentation des flux

Les flux sont des abstractions qui vous permettent de traiter les éléments d'une collection de manière déclarative. Au lieu de parcourir explicitement une collection à l'aide de boucles, vous pouvez utiliser l'API Stream pour décrire ce que vous souhaitez faire avec ces éléments. L'API Stream prend en charge les opérations d'agrégation telles que le filtrage, la cartographie, la réduction et bien d'autres.

Création de flux

Vous pouvez créer un Stream de plusieurs manières. L'une des méthodes les plus courantes consiste à utiliser des collections, en appelant la méthode stream() : Liste<Chaîne> liste = Arrays.asList("a", "b", "c"); Flux<Chaîne> flux = liste.stream(); Une autre façon consiste à utiliser des méthodes statiques de la classe Stream pour créer des flux de tableaux ou de valeurs spécifiques : Flux<Entier> numberStream = Stream.of(1, 2, 3, 4, 5); IntStream intStream = Arrays.stream(new int[] {1, 2, 3, 4, 5});

Opérations intermédiaires

Les opérations intermédiaires sont celles qui transforment un Stream en un autre Stream, telles que filter, map et sorted. Ils sont paresseux, ce qui signifie qu’ils ne sont exécutés que lorsqu’une opération de terminal est invoquée.

  • filtre : sélectionne les éléments qui répondent à un critère spécifique. stream.filter(s -> s.startsWith("a"));
  • map : applique une fonction à chaque élément et renvoie un Stream avec les résultats. stream.map(String::toUpperCase);
  • triés : trie les éléments selon l'ordre naturel ou un comparateur fourni. stream.sorted(Comparator.naturalOrder());

Opérations sur les terminaux

Les opérations de terminal sont celles qui produisent un résultat ou un effet secondaire, tels que forEach, collect, reduce et count. Lorsqu'une opération de terminal est invoquée, le traitement Stream commence.

  • forEach : exécute une action pour chaque élément du Stream. stream.forEach(System.out::println);
  • collect : collecte les éléments Stream dans une collection ou un autre type de résultat. Liste<Chaîne> collecté = stream.collect(Collectors.toList());
  • réduire : combine les éléments Stream pour produire une valeur unique. Facultatif<Chaîne> concaténé = stream.reduce(String::concat);
  • count : renvoie le nombre d'éléments dans le flux. compte long = stream.count();

Flux parallèles

Les flux parallèles permettent d'exécuter des opérations en parallèle sur différents threads, ce qui peut conduire à de meilleures performances sur les systèmes multiprocesseurs. Pour créer un Stream parallèle, vous pouvez appeler la méthode parallelStream() sur une collection ou la méthode parallel() sur un Stream existant. Flux<Chaîne> parallelStream = list.parallelStream();

Considérations relatives aux performances

Lorsque vous utilisez Streams, il est important d’être conscient des implications en termes de performances. Les opérations telles que trié et distinct peuvent être coûteuses car elles nécessitent un traitement supplémentaire. De plus, l’utilisation de Parallel Streams ne garantit pas toujours une augmentation des performances et peut même s’avérer contre-productive si le coût de fractionnement et de fusion des tâches est supérieur au gain du traitement parallèle.

Bonnes pratiques

Lorsque vous travaillez avec Streams, il est essentiel de suivre quelques bonnes pratiques pour garder le code propre et efficace :

  • Utilisez des méthodes de référence autant que possible pour améliorer la lisibilité.
  • Évitez de modifier l'état des objets externes dans les opérations Stream.
  • Préférez les opérations sans état telles que map et filter aux opérations avec état telles que sorted.
  • Pensez à la lisibilité et à la maintenabilité du code plutôt qu'aux micro-optimisations.

Conclusion

L'API Stream en Java offre un moyen puissant et flexible de travailler avec des collections de données. Avec un large éventail d'opérations intermédiaires et terminales, Streams permet aux développeurs d'écrire du code plus expressif et concis. En comprenant et en appliquant correctement les concepts Streams, vous pouvez améliorer considérablement la qualité et les performances de votre code Java.

Répondez maintenant à l’exercice sur le contenu :

Laquelle des affirmations suivantes concernant l’API Stream en Java est vraie ?

Tu as raison! Félicitations, passez maintenant à la page suivante

Vous avez raté! Essayer à nouveau.

Image de l'article Concurrence et threads en Java

Page suivante de lebook gratuit :

117Concurrence et threads en Java

0 minutes

Obtenez votre certificat pour ce cours gratuitement ! en téléchargeant lapplication Cursa et en lisant lebook qui sy trouve. Disponible sur Google Play ou App Store !

Get it on Google Play Get it on App Store

+ 6,5 millions
d'étudiants

Certificat gratuit et
valide avec QR Code

48 mille exercices
gratuits

Note de 4,8/5 dans les
magasins d'applications

Cours gratuits en
vidéo, audio et texte