Ich habe vor kurzem gelernt, dass Sammlungen aggregieren Operationen besser Option ist als für jedes Konstrukt oder Iterator, aber ich habe nicht herausgefunden, wie. Welche Vorteile bietet es, einen Stream zu erhalten und aggregierte Operationen durchzuführen. Gibt es irgendein Leistungsproblem oder nur Einfachheit von Syntex?Um Sammlungen zu durchqueren, aggregierte Operation ist bessere Option wie?
1
A
Antwort
1
Einer der Hauptunterschiede zwischen Aggregatoperationen und Iteratoren (oder für jede Schleife) besteht darin, dass der erste eine interne Iteration verwendet. Wie Oracle-Dokumentation sagt:
„externe Iteration nur die Elemente einer Sammlung iterieren kann sequentiell interne Iteration wird diese Einschränkung nicht hat Es kann leichten Vorteil der parallelen Berechnungen nehmen.“. Ref: https://docs.oracle.com/javase/tutorial/collections/streams/index.html#differences
Ich habe das Java-8-Tag hinzugefügt, da Sie nach Streams zu fragen scheinen. –
versuchen, einige Multi-Threaded-Aggregat-Operation mit einfachen for-each zu tun, und Sie werden sehen, wie schwer es ist. Sie müssen eine Menge Sachen usw. synchronisieren, da die Liste nicht threadsicher ist. Sie können dasselbe erreichen, indem Sie Streams verwenden, indem Sie einfach nur parallelen Stream verwenden, es ist viel einfacher und sicherer. Spart viel Zeit. Außerdem können Sie sich bei Streams auf die Frage "Was" konzentrieren und nicht darauf, wie sie das "Wie" wegnehmen. Die Iteration erfolgt intern für Sie direkt. – george
Der Hauptvorteil ist weder Leistung (dachte, dass es gut funktioniert) noch Einfachheit der Syntax (obwohl dies auch ein Vorteil sein kann). Der Vorteil ist _expressing die Operation auf einer höheren Abstraktionsebene, als eine Eigenschaft des Datensatzes, anstatt ein imperativer Prozess, der sich über jedes einzelne Element krümmt und ein Ad-hoc-Ergebnis berechnet. –