Neuerungen in Java 8 StreamAPI- Paar fragen

ArkLut

Aktives Mitglied
Ich habe Grad bischen über Neuerungen in Java 8 gelesen, und mir sind dazu einige fragen in den Sinn gekommen, die ich mit euch gerne klären würde.

StreamAPI -> die Terminierenden Methoden min/max/avg/sum.
Dadurch das man einen Stream nur einmal terminieren kann muss man für jedes den Stream neu aufbauen.
Oft will man ja aber gerade von diesen nicht nur einen sondere mehre -> da muss man also den stream wieder vollständig durchlaufen. Oder gibt es da eine andere Möglichkeit?

StreamAPI -> Einfach zum parallelisieren
es ist ja möglich die einfach parallel ablaufen zu lassen -> das Zahlt sich aber natürlich nicht bei allen aufgaben / Datenmengen aus.
Gibt es da nützliche Faust-Regeln ab wann parallel sinnvoll ist?

CompletableFutures -> CompletableFutures<>().supplyAsync().thenApply().theanAccep();
Ich kann das Konzept dahinter nicht verstehen -> was lassen diese bessere anders lösen als Streams?
 
Bezüglich terminierender Methoden: Jein. Es gibt hier nur die Möglichkeit, spezielle Consumer-Klassen zu schreiben oder existierende zu verwenden, die dir die Aggregierungsfunktionen alle aufeinmal auf einem einzigen Stream berechnen.
Hierfür gibt es z.B.:
- https://docs.oracle.com/javase/8/docs/api/java/util/DoubleSummaryStatistics.html
- https://docs.oracle.com/javase/8/docs/api/java/util/IntSummaryStatistics.html

Siehe:
- https://stackoverflow.com/questions...-of-a-list-in-java-8/25988761#answer-25988761
 
Gibt es da nützliche Faust-Regeln ab wann parallel sinnvoll ist?
Das kann man pauschal nicht sagen, weil die Frage ist, was mit den Objekten aus dem Stream passiert. Als Faustregel würde ich sagen: nur in den Fällen, in denen man auch ohne Streams über Parallelisierung nachdenkt.

Wenn Du das Maximum von 1000 Zahlen wissen willst, kannst Du Dir Parallelisierung schenken. Willst Du aber für jedes Element eine Operation durchführen, die viel CPU-Zeit benötigt, dann kann Parallelisierung schon bei 2 Elementen sinnvoll sein.
 
Vereinfacht:
1. paralleler Stream = ich möchte unter "bestmöglicher" Ausnutzung der CPU etwas berechnen
2. CompletableFuture = ich möchte etwas im Hintergrund berechnen
 

Neue Themen


Zurück
Oben