Conversion d'un itérateur en flux sans copie
Convertir un itérateur directement en flux sans créer de copie intermédiaire est une opération souhaitable pour des raisons de performances. Voici deux méthodes efficaces pour réaliser cette conversion :
Méthode 1 : Utiliser Spliterator
Créez un Spliterator à partir de l'Iterator en utilisant la classe Spliterators et utilisez-le comme base pour le Stream :
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);</code>
Méthode 2 : Utilisation d'Iterable
Créez un Iterable à partir de l'Iterator à l'aide d'une expression lambda. Iterable est une interface fonctionnelle, ce qui rend cette conversion simple :
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);</code>
La clé pour éviter une copie dans les deux méthodes est qu'elles utilisent la classe StreamSupport, qui vous permet de créer un Stream directement à partir d'un Spliterator ou Itérable sans manipulation de collection intermédiaire.
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!