Mit Java 8-Streams können Entwickler mithilfe einer Reihe vordefinierter Vorgänge präzise Daten aus einer großen Sammlung extrahieren.
Vor der Veröffentlichung von Java 8 wurde die Verwendung des Begriffs "Stream" in Java automatisch mit E / A verknüpft. In Java 8 wurde jedoch ein Stream eingeführt, der als eine Reihe von Rechenschritten bezeichnet werden kann, die in einer sogenannten "Stream-Pipeline" miteinander 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 zum Extrahieren bestimmter Daten ausführt und diese Daten dann der Anwendung zur Verwendung bereitstellt. Im Wesentlichen können Sie damit spezialisierte Daten aus einer Sammlung verallgemeinerter Daten extrahieren.
Wie Streams funktionieren
Eine Stream-Pipeline beginnt immer mit einer Quelle. Die Art der Quelle hängt von der Art der Daten ab, mit denen Sie sich befassen. Zwei der beliebtesten sind jedoch Arrays und Sammlungen.
Um die Sammlung in einen anfänglichen Stream umzuwandeln, müssen Sie die hinzufügen Strom() Funktion zur Quelle. Dadurch wird die Quelle in die Stream-Pipeline eingefügt, in der mehrere verschiedene Zwischenoperationen ausgeführt werden (z Filter() und Sortieren()) kann daran arbeiten.
Nachdem alle erforderlichen Zwischenoperationen ausgeführt wurden, können Sie eine Terminaloperation einführen (z für jedes()), wodurch die zuvor extrahierten Daten aus der Quelle erzeugt werden.
Leben ohne Ströme
Java 8 wurde 2014 veröffentlicht, aber zuvor mussten Java-Entwickler noch spezielle Daten aus einer Sammlung allgemeiner Daten extrahieren.
Angenommen, Sie haben eine Liste von Zufallszeichen, die mit Zufallszahlen kombiniert werden, um eindeutige Zeichenfolgenwerte zu bilden. Sie möchten jedoch nur die Werte, die mit dem Zeichen „C“ beginnen, und Sie möchten das Ergebnis in aufsteigender Reihenfolge anordnen Auftrag. So würden Sie diese Daten ohne Streams extrahieren.
Verbunden: Was Sie über die Verwendung von Strings in Java wissen müssen
Beispiel für das Filtern und Sortieren von Werten ohne Streams
importiere java.util. Anordnungsliste;
importiere java.util. Arrays;
importiere java.util. Aufführen;
öffentliche Klasse Main {
public static void main (String [] args) {
// Deklariere und initialisiere die Array Liste
Aufführen 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"
);
// deklariere, dass die Array-Liste die benötigten Werte speichert
Aufführen requireValues = new ArrayList <> ();
// Extrahiere die erforderlichen Werte und speichere sie in reqquiredValues
randomValues.forEach (Wert -> {
if (value.startsWith ("C")) {
requiredValues.add (Wert);
}
});
// sortiere die erforderlichen Werte in aufsteigender Reihenfolge
requireValues.sort ((String value1, String value2) -> value1.compareTo (value2));
// drucke jeden Wert auf die Konsole
requireValues.forEach ((String value) -> System.out.println (value));
}
}
Sie müssen auch die Array-Liste deklarieren und initialisieren, unabhängig davon, ob Sie Streams oder eine andere Extraktionsmethode verwenden. Wenn Sie Streams verwenden, müssen Sie keine neue Variable deklarieren, die die erforderlichen Werte enthält, und im obigen Beispiel die anderen fünf Plus-Codezeilen nicht erstellen.
Verbunden: Erstellen und Ausführen von Vorgängen für Arrays in Java
Der obige Code erzeugt die folgende Ausgabe in der Konsole:
C11
C12
C13
C14
C15
C16
Leben mit Strömen
Bei der Programmierung bedeutet Effizienz, dass mit deutlich weniger Code dasselbe Ergebnis erzielt wird. Genau das macht eine Stream-Pipeline für einen Programmierer. Wenn jemand das nächste Mal fragt: "Warum ist es wichtig, Streams in Ihrem Projekt zu verwenden?" Einfach ausgedrückt: "Streams unterstützen eine effiziente Programmierung."
Wenn Sie mit unserem obigen Beispiel fortfahren, transformiert die Einführung von Streams das gesamte Programm.
Filtern und Sortieren von Werten anhand eines Stream-Beispiels
importiere java.util. Arrays;
importiere java.util. Aufführen;
öffentliche Klasse Main {
public static void main (String [] args) {
// Deklariere und initialisiere die Array Liste
Aufführen 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"
);
// ruft nur Werte ab, die mit C beginnen, sortiert und auf der Konsole gedruckt.
randomValues.stream (). filter (value-> value.startsWith ("C")). sortiert (). 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 (dies sind alle Werte, mit denen begonnen wird 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 möchten, geben Sie den Wert ein C15 würde zuerst gedruckt werden. deshalb, die Sortieren() Die Funktion wird in die Stream-Pipeline eingeführt, um das neue Array in aufsteigender Reihenfolge neu anzuordnen.
Die letzte Funktion in der Stream-Pipeline ist a für jedes() Funktion. Dies ist eine Terminalfunktion, die zum Stoppen der Stream-Pipeline verwendet wird und in der Konsole die folgenden Ergebnisse liefert:
C11
C12
C13
C14
C15
C16
Es gibt eine umfangreiche Liste von Zwischenoperationen, die in einer Stream-Pipeline verwendet werden können.
Eine Stream-Pipeline beginnt immer mit einer einzigen Quelle und a Strom() Funktion und endet immer mit einer einzelnen Terminaloperation (obwohl es mehrere verschiedene gibt Wählen Sie aus.) Zwischen diesen beiden Abschnitten befindet sich eine Liste von sechs Zwischenoperationen, die Sie ausführen können benutzen.
In unserem obigen Beispiel werden nur zwei dieser Zwischenoperationen verwendetFilter() und Sortieren(). Die von Ihnen gewählte Zwischenoperation 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äre und wir dieselben Zwischenoperationen für sie ausführen würden, würden wir das folgende Ergebnis erhalten.
Beispiel für Filter- und Sortiervorgänge für Kleinbuchstaben
importiere java.util. Arrays;
importiere java.util. Aufführen;
öffentliche Klasse Main {
public static void main (String [] args) {
// Deklariere und initialisiere die Array Liste
Aufführen 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"
);
// ruft nur Werte ab, die mit C beginnen, sortiert und auf der Konsole gedruckt.
randomValues.stream (). filter (value-> value.startsWith ("C")). sortiert (). 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 Stream-Pipeline einzuführen. Diese Operation ist als die bekannt Karte() Funktion.
Verwenden des Kartenfunktionsbeispiels
importiere java.util. Arrays;
importiere java.util. Aufführen;
öffentliche Klasse Main {
public static void main (String [] args) {
// Deklariere und initialisiere die Array Liste
Aufführen 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"
);
// wandelt alle Kleinbuchstaben in Großbuchstaben um,
// ruft nur Werte ab, die mit C beginnen, sortiert und auf der Konsole gedruckt.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). sortiert (). forEach (System.out:: println);
}
}
Das Karte() Funktion transformiert ein Objekt von einem Zustand in einen anderen; In unserem obigen Beispiel werden alle Kleinbuchstaben in der Array-Liste in Großbuchstaben umgewandelt.
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 das folgende Ergebnis in der Konsole und repräsentiert erfolgreich alle 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 zusätzliche spezifische, relevante Daten aus einer großen Quelle extrahieren. Solange Sie die Initiale einschließen Strom() Mit dieser Funktion und einem Terminaloperator können Sie eine beliebige Kombination von Zwischenoperationen verwenden, die passende Ergebnisse für Ihr Ziel liefern.
Wenn Sie sich über die Codezeile in unserem Artikel wundern Filter() Funktion; Es ist als "Lambda-Ausdruck" bekannt. Lambda-Ausdrücke sind eine weitere Funktion, die mit Java 8 eingeführt wurde, und es enthält viele Nuggets, die Sie möglicherweise nützlich finden.
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
- Programmierung
- Java
- Codierungs-Tutorials
Kadeisha Kean ist ein Full-Stack-Softwareentwickler und technischer / technologischer Redakteur. Sie hat die ausgeprägte Fähigkeit, einige der komplexesten technologischen Konzepte zu vereinfachen. Herstellung von Material, das von jedem Technologie-Neuling leicht verstanden werden kann. Sie schreibt leidenschaftlich gern, entwickelt interessante Software und bereist die Welt (durch Dokumentarfilme).
Abonnieren Sie unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Noch ein Schritt…!
Bitte bestätigen Sie Ihre E-Mail-Adresse in der E-Mail, die wir Ihnen gerade gesendet haben.