In Lambda-lastigen Bibliotheken vor Java 8 wie Guava verwenden die Ausgaben gängige Java Collection Framework-Schnittstellen, sodass sie leicht an externe / interne APIs weitergegeben werden können und dennoch einige verzögerte Berechnungen möglich sind, wenn die Bibliotheksmethode dies tut (z . B. faul filter()
und transform()
).
In Java 8-Streams ist der Aufruf zum Abrufen eines Collection
/ Map
jedoch ein Terminal (dh eifrig), und es werden auch neue Datenstrukturen zugewiesen, um die Ergebnisse zu speichern.
Bei komplizierten Berechnungen mit mehreren Stufen und Strategiemustern in der Mitte führt dies aufgrund der Zwischenergebnisse zu vielen unnötigen Zuordnungen.
Glauben die Leute, dass es eine gute Praxis für interne APIs (dh Strategiemusterstrategien) ist, Stream
s zu übernehmen und zurückzugeben, oder sollte ich einfach auf die faulen, aber nicht optimierten (Wortspiel beabsichtigt, denke ich) Guava-APIs zurückgreifen?
Bearbeiten:
Mein Hauptanliegen Stream
ist, dass es nur einmal konsumiert werden kann und so etwas wie ein Supplier<Stream<X>>
äußerst umständliches Aussehen passiert . Es drängt Sie fast dazu, nur ein zu bestehen Collection
und es dann erneut zu wiederholen stream()
(und die Kosten für eine eifrige Bewertung zu diesem Zeitpunkt zu bezahlen).