Sie sind also hier, um etwas über Bäche in Java zu erfahren, aber nicht über die Art von Bächen, in denen Menschen angeln gehen, oder über Wasserflüsse. Die Rede ist von Datenströmen, einer leistungsstarken Funktion, die in Java 8 eingeführt wurde und die Arbeit mit Daten erheblich vereinfacht. Machen Sie sich keine Sorgen, egal, ob Sie ganz neu dabei sind oder es ausprobiert haben, es aber nicht ganz knacken konnten. Ich begleite Sie durch die gesamte Reise in einfacher, leicht verständlicher Sprache.
Bereit? Tauchen wir ein in Java Streams!
Ein Stream ist eine Möglichkeit, Daten in einer Sequenz zu verarbeiten. Stellen Sie sich vor, Sie haben eine Liste mit Elementen und möchten etwas mit diesen Elementen tun (filtern, sortieren, zuordnen usw.). Mit einem Stream können Sie all das auf saubere und effiziente Weise erledigen. Es ist wie ein Fließband, an dem Ihre Daten verschiedene Schritte durchlaufen, bis sie verarbeitet werden.
Wichtige Dinge, die Sie bei Streams beachten sollten:
Warum nicht einfach eine for-Schleife verwenden oder Sammlungen direkt bearbeiten? Nun, es gibt drei Hauptgründe:
Werfen wir einen Blick auf die beiden Haupttypen von Stream-Operationen: Intermediate und Terminal.
Dies sind die Vorgänge, die die Daten vorbereiten, aber nicht sofort zu einem Endergebnis führen. Stellen Sie sich diese als „Workshop“-Schritte vor.
Filter()
Das ist wie ein Sieb. Es wählt Elemente basierend auf einer Bedingung aus. Wenn Sie beispielsweise nur die geraden Zahlen aus einer Liste von Ganzzahlen möchten, verwenden Sie filter().
java Copy code Listnumbers = Arrays.asList(1, 2, 3, 4, 5); List evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); // Output: [2, 4]
Warum filtern? Ohne filter() müssten Sie die Liste manuell durchlaufen und nur die passenden Elemente zu einer neuen Liste hinzufügen. Mit filter() können Sie dies in einem sauberen Schritt erledigen.
Karte()
Dies ist ein Transformator. Es nimmt ein Element und gibt etwas anderes zurück. Wenn Sie beispielsweise eine Liste mit Zeichenfolgen haben und die Länge jeder Zeichenfolge angeben möchten:
java Copy code Listwords = Arrays.asList("apple", "banana", "cherry"); List lengths = words.stream() .map(String::length) .collect(Collectors.toList()); // Output: [5, 6, 6]
Warum Map? Map() wird verwendet, wenn Sie jedes Element in etwas anderes umwandeln müssen, beispielsweise eine Liste von Zeichenfolgen in eine Liste ihrer Längen umwandeln.
unterscheidbar()
Es ist wie ein Duplikatfilter. Dadurch werden doppelte Elemente aus einem Stream entfernt.
java Copy code Listnumbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List distinctNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); // Output: [1, 2, 3, 4, 5]
Warum eindeutig? In einer normalen Liste müssten Sie manuell nach Duplikaten suchen. simply() erledigt dies für Sie in einer Zeile.
sorted()
Dadurch werden Ihre Daten in natürlicher Reihenfolge sortiert (oder in einer benutzerdefinierten Reihenfolge, wenn Sie möchten).
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // Output: ["Alice", "Bob", "Charlie"]
Warum sortiert? Anstatt die Sortierlogik selbst zu schreiben, erledigt sorted() das für Sie.
Das sind diejenigen, die das Endergebnis erzeugen und die Verarbeitung des gesamten Streams auslösen. Stellen Sie sich diese als „Ausstiegspunkt“ vor.
sammeln()
Dies ist die häufigste Terminaloperation. Es sammelt die Ergebnisse des Streams und fügt sie in eine Liste, einen Satz oder eine andere Sammlung ein.
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List upperNames = names.stream() .map(String::toUpperCase) .collect(Collectors.toList()); // Output: ["CHARLIE", "ALICE", "BOB"]
Warum sammeln? Sie verwenden fast immer Collect(), um die Ergebnisse Ihres Streams in einer Sammlung zu sammeln. Es ist Ihre letzte Station.
forEach()
Wenn Sie kein Ergebnis benötigen und nur eine Aktion für jedes Element ausführen möchten (z. B. sie drucken), ist forEach() Ihr Freund.
java Copy code numbers.stream() .forEach(System.out::println);
Warum forEach? Dies ist perfekt für Nebeneffekte, wie das Drucken von Daten auf der Konsole oder das Schreiben in eine Datei.
reduzieren()
reduce() nimmt eine Reihe von Daten und fasst sie zu einem einzigen Ergebnis zusammen. Summieren Sie beispielsweise eine Liste von Zahlen:
java Copy code int sum = numbers.stream() .reduce(0, Integer::sum); // Output: 15
Warum reduzieren? Wenn Sie Werte in einem einzigen Ergebnis kombinieren oder akkumulieren müssen, ist Reduce() Ihre erste Wahl.
Nicht alle Streams werden aus Sammlungen erstellt. Java bietet andere Arten von Streams zur Verarbeitung verschiedener Arten von Daten:
IntStream, LongStream, DoubleStream
Diese Streams sind auf den Umgang mit primitiven Typen spezialisiert. Anstelle von Boxing- und Unboxing-Werten wie „Stream
Beispiel:
java Copy code IntStream intStream = IntStream.of(1, 2, 3, 4); int sum = intStream.sum(); // Output: 10
Datenstrom
Sie können Streams aus Dateien mit Files.lines() erstellen.
java Copy code try (Streamlines = Files.lines(Paths.get("data.txt"))) { lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
Warum Dateistreams verwenden? Beim Umgang mit großen Dateien ist das Laden aller Daten in den Speicher möglicherweise nicht effizient. Wenn Sie einen Stream verwenden, können Sie ihn Zeile für Zeile verarbeiten.
Gute Frage! Vergleichen wir:
Bei Streams in Java geht es darum, die Art und Weise zu vereinfachen, wie Sie Daten verarbeiten. Sie machen Ihren Code lesbarer, einfacher zu warten und effizienter bei der Arbeit mit Sammlungen. Egal, ob Sie Daten filtern, transformieren oder reduzieren, Streams bietet Ihnen klare, unkomplizierte Methoden, die aufwändige Schleifen und manuelle Arbeit überflüssig machen.
Da Sie nun mit den Grundlagen von Streams vertraut sind, warum sollten Sie hier aufhören? Folgen Sie mir auf Twitter, LinkedIn oder schauen Sie sich meinen Blog an, um weitere Java-Tipps zu erhalten, die Sie im Handumdrehen zum Profi machen! Und wenn Sie diesen Leitfaden hilfreich fanden, teilen Sie ihn mit Ihren Entwicklerkollegen – denn Teilen ist wichtig!
Bereit, es auszuprobieren? Lassen Sie uns den Stream in Ihrem nächsten Projekt zum Fließen bringen!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3