Conversion d'itérateurs en flux
En programmation Java, la conversion d'un itérateur en flux vous permet d'accéder aux éléments d'une collection de manière séquentielle . Cela peut être utile pour les opérations qui ne nécessitent qu'un seul passage sur les éléments, comme les filtrer ou les réduire.
Pour convertir un itérateur en flux, vous pouvez exploiter la classe StreamSupport et sa méthode stream(). Cette méthode prend en entrée un Spliterator, qui représente la structure sous-jacente de l'itérateur. Vous pouvez obtenir un Spliterator à partir d'un itérateur en utilisant la méthode Spliterators.spliteratorUnknownSize(). Voici un exemple :
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);
Une autre approche pour convertir un itérateur en flux consiste à créer un itérable à l'aide d'une expression lambda. L'interface Iterable est fonctionnelle, ce qui signifie que vous pouvez définir son implémentation avec une seule méthode. Voici comment y parvenir :
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);
Cette technique offre une meilleure lisibilité, en particulier lorsque vous travaillez avec des itérateurs complexes.
Lorsque vous tentez de convertir un itérateur en flux à l'aide de Stream.generate() méthode, vous pouvez rencontrer une NoSuchElementException si vous n’invoquez pas hasNext() sur l’itérateur. En effet, hasNext() garantit que l'itérateur a plus d'éléments à fournir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!