Gibt es eine Möglichkeit, einen Stream wiederzuverwenden?
Lerne ich die neuen Java 8 features, und beim Experimentieren mit streams (java.util.stream.Stream
) und Sammler, erkannte ich, dass ein stream kann nicht zweimal verwendet werden.
Gibt es eine Möglichkeit Sie wieder zu verwenden?
InformationsquelleAutor der Frage Francisco | 2016-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Dokumentation:
Also die Antwort ist Nein, streams sind nicht dazu gedacht, wiederverwendet zu werden.
InformationsquelleAutor der Antwort Vince Emigh
Wenn Sie wollen, um die Wirkung der Wiederverwendung eines Baches, könnten Sie wickeln den stream Ausdruck in einer Anbieter-und call -
myStreamSupplier.get()
Wann immer Sie wollen eine neue. Zum Beispiel:InformationsquelleAutor der Antwort Hank D
Wie schon andere gesagt haben, "Nein das kannst du nicht".
Aber es ist nützlich, daran zu erinnern, die praktisch
summaryStatistics()
für viele grundlegende Operationen:Also statt:
Können Sie:
InformationsquelleAutor der Antwort Andrejs
Die ganze Idee mit dem Stream ist, dass es einmal aus. Dies ermöglicht Ihnen das erstellen von nicht-reenterable Quellen (zum Beispiel, liest die Zeilen von der Netzwerk-Verbindung), ohne Zwischenlagerung. Wenn Sie jedoch möchten, dass die Wiederverwendung der Stream-Inhalte, Sie können es dump in die fortgeschrittene Sammlung, um die "hard copy":
Wenn Sie nicht wollen, zu materialisieren stream, in einigen Fällen gibt es Möglichkeiten, um verschiedene Dinge zu tun, die mit den gleichen stream auf einmal. Zum Beispiel, können Sie finden diese oder diese Frage für details.
InformationsquelleAutor der Antwort Tagir Valeev
Kommen zu denken, dies wird der "Wiederverwendung" ein stream ist nur der Wille Durchführung das gewünschte Ergebnis mit einem schönen inline-Betrieb. Also, im Grunde, was wir hier reden, ist, was können wir tun, um zu halten auf die Verarbeitung, nachdem wir, schrieb Sie ein terminal-Betrieb?
1), wenn Ihre terminal-operation liefert eine Sammlungdas problem wird umgehend gelöst, da jeder Sammlung werden kann, stellte sich wieder in eine stream (JDK 8).
2), wenn Ihre terminal-Operationen gibt ein optionalmit JDK 9 Erweiterungen, Optional-Klasse, können Sie das Optionale Ergebnis in einen Datenstrom, und erhalten Sie die gewünschte nett inline-Betrieb:
3) wenn Sie Ihr terminal-Betrieb gibt etwas anderesich bezweifle wirklich, dass sollten Sie erwägen, einen Datenstrom zu verarbeiten, Ergebnis:
InformationsquelleAutor der Antwort BabaNew
Als andere haben darauf hingewiesen, die Richtung selbst kann nicht wiederverwendet werden.
Aber eine Möglichkeit um den Effekt der Wiederverwendung ein stream ist zu extrahieren Sie die stream-creation code, um eine Funktion.
Können Sie dies tun, indem Sie eine Methode oder ein function-Objekt, welches den Datenstrom erstellen code. Sie können dann verwenden Sie es mehrmals.
Beispiel:
Wenn auf der anderen Seite, haben Sie einen stream, die Sie wollen, Durchlaufen Sie mehrere Male, dann müssen Sie speichern den Inhalt des Datenstroms in einigen Sammel-Objekt.
Dann kann man mehrere streams mit dem gleichen Inhalt als Sammlung.
Beispiel:
InformationsquelleAutor der Antwort Lii