Grobe Zusammenfassung des Java8-Streams

Lassen Sie uns nun einen kurzen Blick auf Java Stream werfen. Grundsätzlich wird es unter Bezugnahme auf JavaDoc of Stream zusammengefasst, jedoch auf die Methode Da Details wie die Typvariable des internen Arguments weggelassen werden, finden Sie Details in JavaDoc. Stream ist ein Konzept, das in Java 8 veröffentlicht wurde und verschiedene Verarbeitungen für eine Sammlung von Elementen ausführen kann.

Stream-Operationen

Stream-Vorgänge können in drei Phasen unterteilt werden: Generieren, Zwischenschalten und Beenden. Generierungs- und Beendigungsoperationen können nur einmal pro Stream-Operation ausgeführt werden, Zwischenoperationen können jedoch mehrmals ausgeführt werden. Da die Zwischenoperationsmethode als Methode konzipiert ist, die eine Stream-Instanz zurückgibt, kann sie durch eine Methodenkette beschrieben werden.

Ergebnisvariable=Generieren().Zwischenbetrieb 1().Zwischenbetrieb 2().Zwischenbetrieb 3().Kündigungsoperation();

Generieren

Wie der Name schon sagt, wird beim Erstellen zuerst ein Stream erstellt. Stream ist jedoch eine Schnittstelle, und Implementierungsklassen werden nicht in der üblichen instanziierten Form bereitgestellt. Die Sammlung bietet die Methoden stream () und parallel (), mit denen Sie den Stream eines Elements abrufen können. In vielen Fällen möchten Sie jedoch nur den Stream abrufen, ohne eine Sammlung zu erstellen. Daher können Sie einen Stream mit den folgenden statischen Methoden erstellen, die von Stream bereitgestellt werden.

Methode Inhalt Elementanzahl
empty() [] Begrenzt(Himmel)
of(Object e1, Object e2, Object e3, …) [e1, e2, e3, …] Begrenzt(Gleich wie Argument)
iterate(T s,Function f) [s, f(s), f(f(s)), f(f(f(s))))…} unendlich
generate(Function f) [f(),f(),f(),f()…] unendlich
concat(Stream s1, Stream s2) [Alle Elemente von s1,Alle Elemente von s2] Durch Argument

Elementtyp in T: Stream

Sie können auch den Builder von Stream.builder () verwenden, um einen Stream zu generieren.

Builder<Integer> builder = Stream.builder();
IntStream s = Stream.builder().add(1).add(2).add(3).build();

Unendliche Streams, die durch "iterieren" oder "generieren" erzeugt werden, müssen mit der unten beschriebenen Zwischenoperation "limit" unterbrochen werden (andernfalls geraten Sie in eine Endlosschleife).

Zwischenbetrieb

Zwischenoperationen werden mit den Elementen im Stream ausgeführt. Die Zwischenoperation gibt eine neue Stream-Instanz zurück, nachdem die Operation auf jedes Element angewendet wurde, sodass Sie die Zwischenoperationen in der Methodenkette verketten können. Zwischenoperationen werden grob in charakteristische Änderungsoperationen, zustandslose Operationen und zustandsbehaftete Operationen unterteilt.

Charakteristische Änderungsoperation

Die Eigenschaftsänderungsoperation ist eine Operation, die die Eigenschaften des Streams selbst ändert. Die Elemente des Inhalts ändern sich nicht. Es wird in der übergeordneten Schnittstelle BaseStream und nicht in Stream definiert.

Methode Inhalt
parallel() Paralleler Stream
sequential() Sequentieller Stream
unordered() Ungeordneter Stream
onClose(Runnable r) Registrieren eines Handlers zum Abschluss

Zustandsloser Zwischenbetrieb

Zustandslose Zwischenoperationen sind Zwischenoperationen, die von anderen Elementen nicht beeinflusst werden, wenn sie an einem Element arbeiten. Daher ist es für die Parallelverarbeitung geeignet, und es wird empfohlen, die Zwischenverarbeitung so zustandslos wie möglich zu gestalten. Im Folgenden sind e und en (n: Ganzzahl) die Elemente im Stream.

Methode Inhalt
filter(Predicate p) p(e)Wenn false, löschen Sie das Element e
map(Function f) [f(e1),f(e2),f(e3),…]
flatMap(Function f) [f(e1)Alle Elemente des Streams werden von zurückgegeben, f(e2)Alle Elemente des Streams werden von zurückgegeben,f(e3)Alle Elemente des Streams werden von zurückgegeben,…]
peek(Function f) Führen Sie f für jedes Element aus und lassen Sie die Elemente des Streams unverändert

Stateful Zwischenbetrieb

Stateful Intermediate-Operationen sind Intermediate-Operationen, die von anderen Elementen beeinflusst werden, wenn Sie ein Element bearbeiten. Bei einigen Vorgängen müssen möglicherweise alle Elemente im Stream das Ergebnis zurückgeben. Ein Beispiel ist beispielsweise die sortierte Methode, mit der die Sortierverarbeitung realisiert wird. Aufgrund des Einflusses anderer Faktoren erfordern zustandsbehaftete Zwischenoperationen die Kontrolle über die komplexe Verarbeitung während der Parallelverarbeitung, was weniger effizient sein kann als die sequentielle Verarbeitung.

Methode Inhalt
distinct() Entfernen Sie doppelte Elemente im Stream
sorted() Sortieren in natürlicher Reihenfolge für vergleichbare Implementierungsklassen
sorted(Comparator c) Sortieren mit Comparator
limit(long maxSize) Auf die Länge von bis zu maxSize-Elementen abschneiden
skip(long n) Verwerfen Sie die ersten n Elemente

"Limit" wird insbesondere als Kurzschluss-Zwischenoperation bezeichnet. Kurzschlussoperationen sind Operationen, die das Potenzial haben, einen unendlichen Strom in einen endlichen Strom umzuwandeln.

Es ist leicht zu glauben, dass "Limit" und "Überspringen" in der Parallelverarbeitung schneller sind als "Unterscheidbar" und "Sortiert", da sie nur die Anzahl der Elemente betrachten, aber in einem geordneten Stream "n von Anfang an". Dies ist eine kostspielige Operation, da Sie es herausfinden müssen. Wenn Sie die parallele Ausführung priorisieren möchten und die Reihenfolge nicht beibehalten müssen, können Sie eine Verbesserung der Effizienz erwarten, indem Sie nicht mit "ungeordnet" bestellen.

Kündigungsoperation

Die Beendigungsoperation verarbeitet den Inhalt des Streams zum Zeitpunkt seines Aufrufs und gibt ein anderes Ergebnis als den Stream zurück (einschließlich kein Ergebnis (ungültig)). Nach Abschluss des Beendigungsvorgangs wird der bis dahin verwendete Stream unbrauchbar. Wenn Sie versuchen, ihn erneut zu verwenden, wird eine IllegalStateException ausgelöst. Daher ist es richtig, Stream-Objekte in der Methodenkette und nicht in Variablen zu behandeln.

Methode Rückgabetyp Inhalt
close() void Schließen Sie den Stream. Alle bei onClose registrierten Close Handler werden aufgerufen
iterator() Iterator Gibt einen Iterator zurück
spliterator() Spliterator Gibt den Splitter zurück
forEach(Consumer action) void Führen Sie die Aktion für jedes Element aus. Bestellung nicht garantieren
forEachOrdered(Consumer action) void Wie bei jedem, garantiert jedoch die Bestellung
toArray() Object[] Ordnen
reduce(T unit, BinaryOperator acc) T die Ermäßigung(Falten).. Gibt das Ergebnis der Kombination von Elementen mit der kumulativen Funktion acc für die Einheit Elementeinheit zurück.
collect(Supplier factory, BiConsumer acc, BiConsumer combiner) Ergebnisbehälter Variable Reduzierung. Ab Werk erzeugter variabler Container(Zum Beispiel ArrayList)Fügen Sie andererseits ein Element mit acc hinzu und kombinieren Sie jeden Behälter mit einem Kombinierer.
min() Optional Gibt das kleinste Element zurück. Sonderfall der Ermäßigung
max() Optional Gibt das größte Element zurück. Sonderfall der Ermäßigung
count() long Gibt die Anzahl der Elemente zurück. Sonderfall der Ermäßigung
anyMatch(Predicate p) boolean p(e)Gibt true zurück, wenn auch nur eines der Bewertungsergebnisse true ist
allMatch(Predicate p) boolean p(e)Gibt true zurück, wenn alle Bewertungsergebnisse von
noneMatch(Predicate p) boolean p(e)Gibt true zurück, wenn alle Bewertungsergebnisse false sind
findFirst() Optional Gibt das erste Element zurück. Gibt beliebige Elemente für ungeordnete Streams zurück
findAny() Optional Gibt ein beliebiges Element zurück

Elementtyp in T: Stream

Ist es schwierig, die Reduktionsoperationen wie "Reduzieren" und "Sammeln" zu verstehen? Ich werde in naher Zukunft mehr darüber in einem anderen Artikel schreiben. → Geschrieben. Auch der unbekannte Name Splitterator kam heraus. Ein Splitterator ist ein Iterator, der parallel verarbeitet werden kann (teilbar). Splitterer werden im Strom behandelt, und während der Parallelverarbeitung wird die Verarbeitung für jeden geteilten Splitterator durchgeführt.

Recommended Posts

Grobe Zusammenfassung des Java8-Streams
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
[Java11] Stream Usage Summary -Basics-
Zusammenfassung des Java-Wissens
Java Generics Zusammenfassung
Probieren Sie Java 8 Stream aus
Java-bezogene Zusammenfassung
Java Stream API
Java 8 studieren (Stream)
Java Stream-Beendigung
[Java] Stream-Verarbeitung
Java 9 Optional :: stream
Zusammenfassung der neuen Funktionen von Java 12
[Java] Stream Collectors Hinweis
[Zusammenfassung] Zum Beispiel die Vorbereitung der Java-Umgebung
effektive Java 3. Zusammenfassung
Zusammenfassung der neuen Funktionen von Java 13
[Java] Stream API-Stream-Generierung
[Java] Stream API / Map
Java statisch [Persönliche Zusammenfassung]
Thread sichere Zusammenfassung ~ Java ~
Informationen zur Java8-Stream-Reduzierung
Persönliche Zusammenfassung über Java
Zusammenfassung der neuen Funktionen von Java 10
Zusammenfassung der regulären Ausdrücke von Java
Zusammenfassung der Java-Unterstützung 2018
Zusammenfassung des Java-Entwurfsmusters
Java-Zusammenfassung für reservierte Wörter
Was ist Java Assertion? Zusammenfassung.
Progate Java (Anfänger) Review & Zusammenfassung
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)
Java Stream API in 5 Minuten
Objektorientierte Zusammenfassung von Anfängern (Java)
[Java] Stream API - Stream-Beendigungsverarbeitung
[Java] Stream API - Stream Zwischenverarbeitung
Java Stream kann nicht wiederverwendet werden.
Zusammenfassung der Grundlagen der Java-Sprache
Java-Tipps - Zusammenfassung der Federausführung
Zusammenfassung der Java Math Klasse
[Java] Einführung in die Stream-API
[Java] Zusammenfassung der Steuerungssyntax
Java-Anwendung für Anfänger: Stream
[Java] Stream API Zwischenoperation
[Java] Zusammenfassung der Entwurfsmuster
[Java] Zusammenfassung der mathematischen Operationen
[Java 8] Doppelte Löschung (& doppelte Überprüfung) mit Stream
[Java] Stream (Filter, Map, ForEach, Reduce)
Berücksichtigung des Java Persistence Framework 2017 (Zusammenfassung) -1
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Java-Veröffentlichungsdatum und EOL-Zusammenfassung
Über Lambda, Stream, LocalDate von Java8
Zusammenfassung
AtCoder 400 Punkte Algorithmus Zusammenfassung (Java Edition)
Java
Grundlegender Verarbeitungsablauf von Java Stream