Java >> Java Tutorial >  >> Java

So verwenden Sie die Streams-API

Java 8 hat eine neue Funktion namens Streams hinzugefügt. Streams stellen eine Folge von Objekten aus einer Quelle dar. In diesem Beitrag zeige ich, wie man die Streams-API verwendet.

Früher hatten wir mit der Sammlungs-API eine Sammlung von Objekten und dann verarbeitete ein Entwickler diese Sammlung, um sie weiter zu bearbeiten und abzufragen. Mit der Streams-Funktion muss der Entwickler keine Verarbeitungsoperationen für die Sammlung von Objekten durchführen.

Streams

Erstens stellen Streams eine Reihe von Elementen in sequentieller Weise bereit. Es bietet eine Reihe von APIs für den Aggregatbetrieb. Streams nehmen Arrays, Sammlungen oder E/A-Quellen als Eingabe.

So funktionieren Streams

Ein Stream repräsentiert eine Folge von Elementen. Stream-Operationen sind entweder Zwischen- oder Endoperationen. Zwischenoperationen geben Streams zur weiteren Verarbeitung zurück, während Terminaloperationen entweder ungültige oder Nicht-Stream-Ergebnisse zurückgeben.

List<String> myList =
    Arrays.asList("test1", "sameresult", "netresult", "grossprofit", "test2");

myList
    .stream()
    .filter(s -> s.startsWith("test"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

Wie oben gezeigt, filter , map , sorted sind Zwischenoperationen und forEach ist eine Terminaloperation. Javadocs liefern die Liste aller Operationen auf Streams.

Die meisten Stream-Operationen akzeptieren eine Art Lambda-Ausdrucksparameter, eine funktionale Schnittstelle, die das Verhalten der Operation angibt.

Anstelle von Sammlungen können Sie auch Stream.Of() verwenden Vorgang zum Erstellen eines Streams aus einer Reihe von Objekten.

Zwischenoperationen haben eine Eigenschaft der Faulheit. Sehen wir uns dazu das folgende Beispiel an:

Stream.of("n1", "n2", "n3", "n4", "n5")
    .filter(s -> {
        System.out.println("filter: " + s);
        return true;
    });

Es wird nichts auf der Konsole gedruckt. Zwischenoperationen funktionieren nur, wenn Terminaloperationen vorhanden sind.

Sobald Sie eine Terminaloperation für Streams aufrufen, können Streams nicht wiederverwendet werden.

Operationen auf Streams

Die Streams-API bietet aggregierte Operationen, die Flexibilität bei der Verwendung von Streams bieten. Ich werde hier ein Beispiel zeigen, wie man Streams benutzt

List<String> listOfStrings = new ArrayList<>();
listOfStrings.add("one");
listOfStrings.add("two");
listOfStrings.add("three");
listOfStrings.add("");
listOfStrings.add("four");

List<String> listOfNotEmptyStrings = listOfStrings.streams().filter(str -> !str.isEmpty()).collect(Collectors.toList());

Im oben gezeigten Beispiel habe ich list von Zeichenfolgen, die ich filtere, um nur eine Liste mit nicht leeren Zeichenfolgen zu erhalten.

Streams bieten auch forEach Operation, die verwendet werden kann, um über die Elemente des Streams zu iterieren.

Collect ist eine Terminaloperation, die die Elemente eines Streams in eine andere Art von Ergebnis umwandeln kann. Beispiel – eine Liste, Karte oder ein Set.

Map ist eine Operation, die es uns ermöglicht, Objekte eines Streams in einen anderen Objekttyp umzuwandeln.

Reduce Der Vorgang kombiniert alle Elemente des Streams zu einem einzigen Ergebnis.

ParallelStreams

Streams bieten auch etwas namens ParallelStreams . Grundsätzlich alle Operationen, die über ParallelStreams ausgeführt werden , werden parallel durchgeführt. Verwenden Sie diese Streams abhängig von Ihrer Nutzung mit Vorsicht, da sie Parallelitätsprobleme verursachen können.

Beispiel – listOfStrings.parallelStream()

ParallelStreams kann verwendet werden, um die Laufzeitleistung bei einer großen Menge von Eingabeelementen zu verbessern.

Schlussfolgerung

In diesem Beitrag habe ich gezeigt, wie die Streams-API in Java 8 verwendet wird. Streams sind in vielen Fällen praktisch, in denen wir eine Liste von Objekten haben und diese Objekte verarbeiten. Wenn Ihnen dieser Beitrag gefallen hat, abonnieren Sie hier meinen Blog.


Java-Tag