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.
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