Umgang mit dem Fehler „Stream wurde bereits ausgeführt oder geschlossen“
Stream-Vorgänge sind nicht wiederholbar, was bedeutet, dass ein Stream nur verwendet werden kann einmal. Dies wirft die Frage auf: Wie kann man dieselben Daten zweimal verarbeiten, ohne dass die Kosten für die Neugenerierung anfallen?
Gibt es eine Lösung, ohne den Stream in eine Sammlung umzuwandeln?
Das Sammeln eines Streams in einer Sammlung ermöglicht mehrere Iterationen, erhöht jedoch den Overhead. Ein besserer Ansatz ist die Verwendung der forEach-Methode, die eine Verbraucherfunktion als Argument verwendet. Innerhalb des Verbrauchers können für jedes Element mehrere Vorgänge ausgeführt werden.
<code class="java">stream().forEach(e -> { consumerA(e); consumerB(e); // ... });</code>
Überlegungen und Einschränkungen zum Design
Die Java Streams API unterstützt aufgrund ihrer Funktion kein Stream-Forking Auswirkungen auf die Effizienz. Der effizienteste Anwendungsfall besteht darin, dass die Daten nur einmal verarbeitet werden, sodass kein Puffern oder Kopieren erforderlich ist. Wenn mehrere Iterationen erforderlich sind, wird empfohlen, die Daten in einer Sammlung zu speichern oder eine alternative Bibliothek wie RxJava zu verwenden.
Alternative Bibliotheksoption: RxJava
RxJava bietet eine größere Flexibilität Modell für die Stream-Verarbeitung. Es unterstützt mehrere Abonnements für ein Observable, was einem Stream ähnelt. Dadurch können dieselben Daten parallel oder sequentiell von verschiedenen Verbrauchern verarbeitet werden, eine Funktion, die in Java Streams nicht verfügbar ist.
Das obige ist der detaillierte Inhalt vonWie verarbeite ich dieselben Daten zweimal in Java-Streams, ohne sie in eine Sammlung zu konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!