"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment convertir un itérateur en flux sans créer de copie ?

Comment convertir un itérateur en flux sans créer de copie ?

Publié le 2024-11-22
Parcourir:892

How to Convert an Iterator to a Stream Without Creating a Copy?

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 :

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
          Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
          false);

Méthode 2 : Utilisation d'Iterable

Créez un itérable à partir de l'itérateur à l'aide d'une expression lambda. Iterable est une interface fonctionnelle, qui rend cette conversion simple :

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();

Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);

La clé pour éviter une copie dans les deux méthodes est qu'elles utilisent la classe StreamSupport, qui vous permet de créer directement un Stream à partir d'un Spliterator ou d'un Iterable sans manipulation de collection intermédiaire.

Dernier tutoriel Plus>

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