Java - Verbesserungen bei der Stream API

Hallo, zukünftige Java-Entwickler! Es ist wonderful, Sie hier zu haben. Heute tauchen wir in ein aufregendes Thema ein: Verbesserungen bei der Stream API in Java. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind; ich werde Sie durch jeden Begriff Schritt für Schritt führen, genau wie ich es in den letzten Jahren für unzählige Schüler getan habe. Also, holen Sie sich Ihr lieblings Getränk, machen Sie es sich bequem, und lassen Sie uns gemeinsam auf diese Java-Reise gehen!

Java - Stream API Improvements

Was ist die Stream API?

Bevor wir uns den Verbesserungen zuwenden, lassen Sie uns mit den Grundlagen beginnen. Die Stream API, die in Java 8 eingeführt wurde, ist wie eine magische Förderband für Ihre Daten. Sie ermöglicht es Ihnen, Sammlungen von Objekten auf eine deklarative Weise zu verarbeiten. Stellen Sie sich vor, Sie haben eine Kiste voller bunter Murmeln und möchten sie sortieren, zählen oder nur die blauen herauspicken. Die Stream API hilft Ihnen dabei, all das effizient und elegant zu erledigen.

Verbesserungen bei der Stream API

Java, wie ein eifriger Schüler, lernt und verbessert sich ständig. Mit den jüngsten Updates hat die Stream API sogar noch besser werden! Lassen Sie uns diese Verbesserungen einzeln erkunden.

takeWhile(Predicate Interface)-Methode

Die takeWhile-Methode ist wie ein Türsteher in einem exklusiven Club, aber anstatt IDs zu kontrollieren, überprüft er eine von Ihnen angegebene Bedingung. Er nimmt Elemente aus dem Stream so lange an, wie sie diese Bedingung erfüllen.

Sehen wir uns das in Aktion an:

List<String> fruits = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List<String> result = fruits.stream()
.takeWhile(fruit -> fruit.length() <= 5)
.collect(Collectors.toList());
System.out.println(result);

Ausgabe:

[apple]

In diesem Beispiel ist takeWhile wie ein Obstpflücker, der aufhört, wenn er ein Obst mit mehr als 5 Buchstaben trifft. Er nimmt "apple", aber hört bei "banana" auf, weil es zu lang ist.

dropWhile(Predicate Interface)

Wenn takeWhile der Türsteher ist, der Leute reinlässt, dann ist dropWhile der Türsteher, der Leute draußen hält... bis zu einem bestimmten Punkt. Er lässt Elemente fallen, solange sie eine Bedingung erfüllen, und behält den Rest.

So funktioniert es:

List<Integer> numbers = Arrays.asList(2, 4, 6, 8, 9, 10, 12);
List<Integer> result = numbers.stream()
.dropWhile(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(result);

Ausgabe:

[9, 10, 12]

In diesem Fall ist dropWhile wie eine person, die keine geraden Zahlen mag. Sie lässt Zahlen fallen, bis sie auf 9 (eine ungerade Zahl) trifft, dann behält sie alles danach, sogar die geraden Zahlen!

iterate-Methode

Die iterate-Methode ist wie ein Geschichtengenerator. Sie geben ihr einen Ausgangspunkt, eine Möglichkeit zu überprüfen, ob die Geschichte weitergehen sollte, und eine Möglichkeit, das nächste Kapitel zu erstellen.

Hier ist ein Beispiel:

Stream<Integer> numbers = Stream.iterate(1, n -> n < 100, n -> n * 2);
numbers.forEach(System.out::println);

Ausgabe:

1
2
4
8
16
32
64

In dieser Geschichte beginnen wir mit 1, gehen so lange weiter, wie die Zahl kleiner als 100 ist, und jede neue Zahl ist das Doppelte der vorherigen. Es ist wie die Legende vom Schachbrett und den Reisbohnen!

ofNullable

ofNullable ist wie ein vorsichtiger Paket handler. Es erstellt einen Stream von höchstens einem Element und stellt sicher, dass Nullwerte elegant behandelt werden.

Sehen wir uns das in Aktion an:

String name = null;
Stream<String> stream = Stream.ofNullable(name);
System.out.println(stream.count());

name = "Alice";
stream = Stream.ofNullable(name);
System.out.println(stream.count());

Ausgabe:

0
1

Wenn name null ist, erstellt ofNullable einen leeren Stream. Wenn name einen Wert hat, erstellt er einen Stream mit diesem einen Wert. Es ist wie ein Zauberer, der etwas erscheinen oder verschwinden lassen kann, je nachdem, ob es existiert!

Alles zusammenbringen

Nun, da wir über diese neuen Werkzeuge in unserer Java-Werkzeugkiste gelernt haben, lassen Sie uns alle in einem Beispiel verwenden:

List<String> words = Arrays.asList("The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog");

List<String> result = words.stream()
.dropWhile(word -> word.length() <= 3)
.takeWhile(word -> !word.equals("over"))
.flatMap(word -> Stream.ofNullable(word.toLowerCase()))
.collect(Collectors.toList());

System.out.println(result);

Ausgabe:

[quick, brown, fox, jumps]

In diesem Beispiel verarbeiten wir eine Liste von Wörtern:

  1. Wir lassen Wörter mit 3 oder weniger Buchstaben fallen (dropWhile)
  2. Wir nehmen Wörter, bis wir "over" treffen (takeWhile)
  3. Wir konvertieren jedes Wort in Kleinbuchstaben und behandeln mögliche Nullwerte (flatMap mit ofNullable)
  4. Schließlich sammeln wir die Ergebnisse in eine neue Liste

Es ist, als ob wir eine neue, verfeinerte Version des klassischen Satzes "quick brown fox" erstellen!

Schlussfolgerung

Und da haben Sie es, liebe Schüler! Wir haben die aufregenden neuen Verbesserungen bei der Java Stream API erkundet. Diese Tools machen die Arbeit mit Streams flexibler und leistungsfähiger als je zuvor. Denken Sie daran, dass das Beherrschen neuer Konzepte wie das Lernen jeder neuen Fähigkeit Übung erfordert. Also fürchten Sie sich nicht, diese Methoden in Ihrem eigenen Code auszuprobieren und herumzuspielen.

Als wir uns abschließen, erinnere ich mich an ein Sprichwort, das ich meinen Schülern oft sage: "In der Programmierung, wie im Leben, endet der Strom des Wissens nie. Weiterlernen, weitercodieren und vor allem: weiter Spaß haben!"

Bis下次, fröhliches Coden!

Credits: Image by storyset