Donc, vous êtes ici pour en savoir plus sur les Ruisseaux en Java, mais pas sur le genre de cours d'eau où les gens vont à la pêche ou où l'eau coule. Nous parlons de flux de données, une fonctionnalité puissante introduite dans Java 8 qui facilite grandement le travail avec les données. Que vous soyez nouveau dans ce domaine ou que vous l'ayez essayé mais que vous n'ayez pas réussi à le résoudre, ne vous inquiétez pas. Je vous guiderai tout au long du voyage dans un langage simple et facile à comprendre.
Prêt? Plongeons-nous dans Java Streams !
Un Stream est un moyen de traiter des données dans une séquence. Imaginez que vous ayez une liste d'éléments et que vous souhaitiez faire quelque chose avec ces éléments (filtrer, trier, cartographier, etc.). Un Stream vous permet de faire tout cela de manière propre et efficace. C'est comme une chaîne de montage où vos données passent par différentes étapes jusqu'à ce qu'elles soient traitées.
Éléments clés à retenir à propos des flux :
Pourquoi ne pas simplement utiliser une boucle for ou manipuler directement les collections ? Eh bien, il y a trois raisons principales :
Jetons un coup d'œil aux deux principaux types d'opérations de flux : Intermédiaire et Terminal.
Ce sont les opérations qui préparent les données mais ne produisent pas de résultat final immédiatement. Considérez-les comme les étapes de « l'atelier ».
filtre()
C'est comme un tamis. Il sélectionne des éléments en fonction d'une condition. Par exemple, si vous souhaitez uniquement les nombres pairs d'une liste d'entiers, vous utiliserez filter().
java Copy code Listnumbers = Arrays.asList(1, 2, 3, 4, 5); List evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); // Output: [2, 4]
Pourquoi filtrer ? Sans filter(), vous devrez parcourir manuellement la liste et ajouter uniquement les éléments correspondants à une nouvelle liste. filter() vous permet de le faire en une seule étape propre.
carte()
Ceci est un transformateur. Il prend un élément et renvoie quelque chose de différent. Par exemple, si vous avez une liste de chaînes et que vous souhaitez connaître la longueur de chaque chaîne :
java Copy code Listwords = Arrays.asList("apple", "banana", "cherry"); List lengths = words.stream() .map(String::length) .collect(Collectors.toList()); // Output: [5, 6, 6]
Pourquoi map ? map() est utilisé lorsque vous devez transformer chaque élément en quelque chose d'autre, comme convertir une liste de chaînes en une liste de leurs longueurs.
distinct()
C'est comme un filtre en double. Cela supprime les éléments en double d'un flux.
java Copy code Listnumbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List distinctNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); // Output: [1, 2, 3, 4, 5]
Pourquoi distinct ? Dans une liste normale, vous devrez vérifier manuellement les doublons. distinct() fait cela pour vous sur une seule ligne.
trié()
Cela trie vos données dans un ordre naturel (ou personnalisé, si vous le souhaitez).
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // Output: ["Alice", "Bob", "Charlie"]
Pourquoi trié ? Au lieu d'écrire vous-même une logique de tri, sorted() la gère pour vous.
Ce sont ceux qui produisent le résultat final et qui déclenchent le traitement de l'intégralité du flux. Considérez-les comme le « point de sortie ».
collecter()
Il s'agit de l'opération de terminal la plus courante. Il rassemble les résultats du flux et les place dans une liste, un ensemble ou une autre collection.
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List upperNames = names.stream() .map(String::toUpperCase) .collect(Collectors.toList()); // Output: ["CHARLIE", "ALICE", "BOB"]
Pourquoi collecter ? Vous utiliserez presque toujours collect() pour rassembler les résultats de votre flux dans une collection. C'est votre dernier arrêt.
pourEach()
Si vous n'avez pas besoin d'un résultat et que vous souhaitez simplement effectuer une action sur chaque élément (comme les imprimer), forEach() est votre ami.
java Copy code numbers.stream() .forEach(System.out::println);
Pourquoi forEach ? C'est parfait pour les effets secondaires, comme l'impression de données sur la console ou l'écriture dans un fichier.
réduire()
reduce() prend un tas de données et les résume à un seul résultat. Par exemple, additionner une liste de nombres :
java Copy code int sum = numbers.stream() .reduce(0, Integer::sum); // Output: 15
Pourquoi réduire ? Lorsque vous devez combiner ou accumuler des valeurs en un seul résultat, réduire() est votre solution.
Tous les flux ne sont pas créés à partir de collections. Java fournit d'autres types de flux pour gérer différents types de données :
IntStream, LongStream, DoubleStream
Ces flux sont spécialisés pour traiter les types primitifs. Au lieu de boxer et de déballer des valeurs telles que Stream
Exemple:
java Copy code IntStream intStream = IntStream.of(1, 2, 3, 4); int sum = intStream.sum(); // Output: 10
Flux de fichiers
Vous pouvez créer des flux à partir de fichiers à l'aide de Files.lines().
java Copy code try (Streamlines = Files.lines(Paths.get("data.txt"))) { lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
Pourquoi utiliser les flux de fichiers ? Lorsqu'il s'agit de fichiers volumineux, le chargement de toutes les données en mémoire peut ne pas être efficace. Utiliser un flux permet de le traiter ligne par ligne.
Bonne question ! Comparons :
Les flux en Java visent à simplifier la façon dont vous traitez les données. Ils rendent votre code plus lisible, plus facile à maintenir et plus efficace lorsque vous travaillez avec des collections. Que vous filtriez, transformiez ou réduisiez des données, Streams vous propose des méthodes claires et simples qui éliminent le besoin de boucles volumineuses et de travail manuel.
Maintenant que vous maîtrisez les bases de Streams, pourquoi vous arrêter ici ? Suivez-moi sur Twitter, LinkedIn ou consultez mon blog pour plus de conseils Java qui feront de vous un pro en un rien de temps ! Et si vous avez trouvé ce guide utile, partagez-le avec vos collègues développeurs, car partager, c'est prendre soin !
Prêt à l'essayer ? Faisons circuler ce flux dans votre prochain projet !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3