Iterable to Stream en Java

1. Vue d'ensemble

Dans ce court didacticiel, convertissons un objet Java Iterable en Stream et effectuons des opérations standard dessus.

2. Conversion de Iterable en Stream

L' interface Iterable est conçue en gardant à l'esprit la généralité et ne fournit aucune méthode stream () à elle seule.

En termes simples, vous pouvez le transmettre à la méthode StreamSupport.stream () et obtenir un Stream à partir de l' instance Iterable donnée .

Considérons notre instance Iterable :

Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

Et voici comment nous pouvons convertir cette instance Iterable en un Stream:

StreamSupport.stream(iterable.spliterator(), false);

Notez que le deuxième paramètre de StreamSupport.stream () détermine si le Stream résultant doit être parallèle ou séquentiel. Vous devez le définir sur true, pour un Stream parallèle .

Testons maintenant notre implémentation:

@Test public void givenIterable_whenConvertedToStream_thenNotNull() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false)); }

En outre, une note d'accompagnement rapide - les flux ne sont pas réutilisables, alors qu'Iterable l' est; il fournit également une méthode spliterator () , qui renvoie une instance java.lang.Spliterator sur les éléments décrits par l' itérable donné .

3. Exécution d'une opération de flux

Effectuons une opération de flux simple:

@Test public void whenConvertedToList_thenCorrect() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); List result = StreamSupport.stream(iterable.spliterator(), false) .map(String::toUpperCase) .collect(Collectors.toList()); assertThat( result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM")); }

4. Conclusion

Ce didacticiel simple montre comment vous pouvez convertir une instance Iterable en une instance Stream et y effectuer des opérations standard, comme vous l'auriez fait pour toute autre instance de Collection .

L'implémentation de tous les extraits de code se trouve dans le projet Github.