Java Streams für Anfänger: Eine Einführung in die Verwendung von Streams in Java

Java Streams für Anfänger: Eine Einführung in die Verwendung von Streams in Java

Java 8-Streams ermöglichen es Entwicklern, mithilfe einer Reihe vordefinierter Operationen präzise Daten aus einer großen Sammlung zu extrahieren.





Vor der Veröffentlichung von Java 8 wurde die Verwendung des Begriffs 'Stream' in Java automatisch mit E/A in Verbindung gebracht. Java 8 führte jedoch einen Stream ein, der als eine Reihe von Rechenschritten bezeichnet werden kann, die in einer sogenannten „Stream-Pipeline“ verkettet sind.





Dieser Artikel führt Sie in Java 8-Streams ein und zeigt, wie sie in Ihren Projekten nützlich sein können.





Was ist ein Stream?

Ein Stream ist eine Java-Schnittstelle, die eine Quelle verwendet, eine Reihe von Operationen durchführt, um bestimmte Daten zu extrahieren, und diese Daten dann der Anwendung zur Verwendung zur Verfügung stellt. Im Wesentlichen ermöglicht es Ihnen, spezialisierte Daten aus einer Sammlung verallgemeinerter Daten zu extrahieren.

So funktionieren Streams

Eine Streampipeline beginnt immer mit einer Quelle. Die Art der Quelle hängt von der Art der Daten ab, mit denen Sie es zu tun haben, aber zwei der beliebtesten sind Arrays und Sammlungen.



Um die Sammlung in einen anfänglichen Stream umzuwandeln, müssen Sie die Strom() Funktion zur Quelle. Dadurch wird die Quelle in die Stream-Pipeline eingefügt, in der mehrere verschiedene Zwischenoperationen (wie z Filter() und Sortieren() ) kann damit arbeiten.

Nachdem alle erforderlichen Zwischenoperationen durchgeführt wurden, können Sie eine Terminaloperation (wie z für jeden() ), die die zuvor extrahierten Daten aus der Quelle erzeugt.





Leben ohne Ströme

Java 8 wurde 2014 veröffentlicht, aber davor mussten Java-Entwickler noch spezielle Daten aus einer Sammlung allgemeiner Daten extrahieren.

Wie groß ist die Installation von Windows 10?

Angenommen, Sie haben eine Liste von zufälligen Zeichen, die mit Zufallszahlen kombiniert werden, um eindeutige Zeichenfolgenwerte zu bilden, aber Sie möchten nur die Werte, die mit dem Zeichen C beginnen, und Sie möchten das Ergebnis in aufsteigender Reihenfolge anordnen. So würden Sie diese Daten ohne Streams extrahieren.





Verwandt: Was Sie über die Verwendung von Strings in Java wissen müssen

Beispiel zum Filtern und Sortieren von Werten ohne Streams


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

Sie müssen die Array-Liste auch deklarieren und initialisieren, unabhängig davon, ob Sie Streams oder eine andere Extraktionsmethode verwenden. Was Sie bei der Verwendung von Streams nicht tun müssen, ist, eine neue Variable zu deklarieren, die die erforderlichen Werte enthält, oder die anderen fünf plus Codezeilen im obigen Beispiel zu erstellen.

Verwandt: Erstellen und Ausführen von Operationen auf Arrays in Java

Der obige Code erzeugt die folgende Ausgabe in der Konsole:


C11
C12
C13
C14
C15
C16

Leben mit Strömen

Beim Programmieren bedeutet Effizienz, das gleiche Ergebnis mit deutlich weniger Code zu erzielen. Genau das macht eine Streampipeline für einen Programmierer. Wenn also das nächste Mal jemand fragt: Warum ist es wichtig, Streams in Ihrem Projekt zu verwenden? Einfach ausgedrückt: Streams unterstützen eine effiziente Programmierung.

Um mit unserem obigen Beispiel fortzufahren, verändert die Einführung von Streams das gesamte Programm.

Filtern und Sortieren von Werten mit einem Stream-Beispiel


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Der obige Code zeigt, wie leistungsfähig die Stream-Schnittstelle ist. Es nimmt eine Liste von zufälligen Array-Werten und wandelt sie mit dem in einen Stream um Strom() Funktion. Der Stream wird dann auf eine Array-Liste reduziert, die die erforderlichen Werte enthält (alle Werte beginnend mit C ), Verwendung der Filter() Funktion.

Wie Sie im obigen Beispiel sehen können, ist die C Werte werden zufällig in der Array-Liste angeordnet. Wenn Sie den Stream an dieser Stelle in der Pipeline drucken würden, wird der Wert C15 würde zuerst gedruckt werden. deshalb, die Sortieren() -Funktion wird in die Stream-Pipeline eingeführt, um das neue Array in aufsteigender Reihenfolge neu anzuordnen.

Die letzte Funktion in der Streampipeline ist a für jeden() Funktion. Dies ist eine Terminalfunktion, die verwendet wird, um die Streampipeline zu stoppen und die folgenden Ergebnisse in der Konsole erzeugt:


C11
C12
C13
C14
C15
C16

Zwischenvorgänge streamen

Es gibt eine umfangreiche Liste von Zwischenvorgängen, die in einer Streampipeline verwendet werden können.

Eine Streampipeline beginnt immer mit einer einzigen Quelle und a Strom() -Funktion und endet immer mit einer einzigen Terminaloperation (obwohl es mehrere verschiedene zur Auswahl gibt). Zwischen diesen beiden Abschnitten befindet sich jedoch eine Liste mit sechs Zwischenoperationen, die Sie verwenden können.

In unserem obigen Beispiel werden nur zwei dieser Zwischenoperationen verwendet --- Filter() und Sortieren() . Welche Zwischenoperation Sie wählen, hängt von den Aufgaben ab, die Sie ausführen möchten.

Wenn einer der Werte, die in unserer Array-Liste oben mit C beginnen, in Kleinbuchstaben geschrieben wären und wir die gleichen Zwischenoperationen mit ihnen durchgeführt hätten, würden wir das folgende Ergebnis erhalten.

Durchführen von Filter- und Sortiervorgängen für Kleinbuchstaben-Beispiel


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Der obige Code erzeugt die folgenden Werte in der Konsole:


C11
C12
C14
C15

Das einzige Problem mit der obigen Ausgabe ist, dass sie nicht alle genau wiedergibt C Werte in unserer Array-Liste. Eine gute Möglichkeit, diesen kleinen Fehler zu beheben, besteht darin, eine weitere Zwischenoperation in die Streampipeline einzuführen. Diese Operation wird als Karte() Funktion.

Verwenden des Beispiels für die Kartenfunktion


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Die Karte() Funktion wandelt ein Objekt von einem Zustand in einen anderen um; in unserem obigen Beispiel wandelt es alle Kleinbuchstaben in der Array-Liste in Großbuchstaben um.

Platzieren der Karte() Funktion kurz vor dem Filter() Funktion ruft alle Werte ab, die mit beginnen C aus der Array-Liste.

Der obige Code erzeugt in der Konsole das folgende Ergebnis, das alle erfolgreich darstellt C Werte in der Array-Liste.


C11
C12
C13
C14
C15
C16

Die anderen drei Zwischenoperationen, die Sie in Ihren Anwendungen verwenden können, umfassen:

  • spähen()
  • Grenze()
  • überspringen()

Java 8 Streams erleichtern die Erstellung von effizientem Code

Mit Java 8-Streams können Sie mit einer Codezeile besonders spezifische, relevante Daten aus einer großen Quelle extrahieren. Solange Sie die Initiale angeben Strom() -Funktion und einem Terminal-Operator können Sie eine beliebige Kombination von Zwischenoperationen verwenden, die passende Ausgaben für Ihr Ziel liefert.

So finden Sie das Lied, das in einem YouTube-Video verwendet wird

Wenn Sie sich über die Codezeile wundern, die in unserem enthalten ist Filter() Funktion; es ist als 'Lambda-Ausdruck' bekannt. Lambda-Ausdrücke sind ein weiteres Feature, das mit Java 8 eingeführt wurde, und es enthält viele Nuggets, die Sie möglicherweise nützlich finden.

Teilen Teilen Tweet Email Eine kurze Einführung in Java 8 Lambdas

Wenn Sie ein Java-Programmierer sind und mehr über Java 8-Lambdas erfahren möchten, werden wir uns in diesem Artikel die Lambda-Syntax und -Verwendung genauer ansehen.

Weiter lesen
Verwandte Themen
  • Programmierung
  • Java
  • Codierungs-Tutorials
Über den Autor Kadeisha Kean(21 Artikel veröffentlicht)

Kadeisha Kean ist Full-Stack-Softwareentwicklerin und technische/Technologie-Autorin. Sie hat die ausgeprägte Fähigkeit, einige der komplexesten technologischen Konzepte zu vereinfachen; Herstellung von Material, das von jedem Technikneuling leicht verstanden werden kann. Sie schreibt leidenschaftlich gerne, entwickelt interessante Software und bereist die Welt (durch Dokumentationen).

Mehr von Kadeisha Kean

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich zu abonnieren