Iterable to Stream en Java

Itératif pour diffuser en Java

1. Vue d'ensemble

Dans ce court didacticiel, convertissons un objet JavaIterable en unStream et effectuons des opérations standard dessus.

2. Conversion deIterable enStream

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

En termes simples, vous pouvez le passer à la méthodeStreamSupport.stream() et obtenir unStream à partir de l'instanceIterable donnée.

Considérons notre instanceIterable:

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

Et voici comment nous pouvons convertir cette instanceIterable en une instanceStream:

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

Notez que le deuxième paramètre deStreamSupport.stream() détermine si lesStream résultants doivent être parallèles ou séquentiels. Vous devriez le définir sur true, pour unStream 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 petite note d'accompagnement - les flux ne sont pas réutilisables, tandis queIterable l'est; il fournit également une méthodespliterator(), qui renvoie unjava.lang.Spliterator instance sur les éléments décrits par lesIterable donnés.

3. Exécution de l'opérationStream

Exécutons 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 tutoriel simple montre comment vous pouvez convertir une instanceIterable en une instanceStream et y effectuer des opérations standard, comme vous l'auriez fait pour toute autre instanceCollection.

L'implémentation de tous les extraits de code peut être trouvée dans lesGithub project.