Maison  >  Article  >  Java  >  Comment traiter deux fois les mêmes données dans des flux Java sans les convertir en collection ?

Comment traiter deux fois les mêmes données dans des flux Java sans les convertir en collection ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 00:36:03850parcourir

How to Process the Same Data Twice in Java Streams without Converting to a Collection?

Gestion de l'erreur « Le flux a déjà été exploité ou fermé »

Les opérations de flux ne sont pas répétables, ce qui signifie qu'un flux ne peut être utilisé que une fois. Cela soulève une question : comment traiter deux fois les mêmes données sans encourir le coût de leur régénération ?

Existe-t-il une solution sans convertir le flux en collection ?

La collecte d'un flux dans une collection permet plusieurs itérations, mais cela ajoute une surcharge. Une meilleure approche consiste à utiliser la méthode forEach, qui prend une fonction de consommateur comme argument. À l'intérieur du consommateur, plusieurs opérations peuvent être effectuées sur chaque élément.

<code class="java">stream().forEach(e -> {
    consumerA(e);
    consumerB(e);
    // ...
});</code>

Considérations et limitations de conception

L'API Java Streams ne prend pas en charge la duplication de flux en raison de son implications en matière d’efficacité. Le cas d’utilisation le plus efficace est celui où les données ne sont traitées qu’une seule fois, éliminant ainsi le besoin de mise en mémoire tampon ou de copie. Si plusieurs itérations sont nécessaires, il est recommandé de stocker les données dans une collection ou d'utiliser une bibliothèque alternative comme RxJava.

Option de bibliothèque alternative : RxJava

RxJava offre une solution plus flexible. modèle pour le traitement des flux. Il prend en charge plusieurs abonnements à un observable, similaire à un flux. Cela permet aux mêmes données d'être traitées en parallèle ou séquentiellement par différents consommateurs, une fonctionnalité non disponible dans Java Streams.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn