Java 9 Stream API Erweiterungen: takeWhile, dropWhile, iterate & ofNullable
Neue Stream-Methoden in Java 9
Die Stream-API erhält vier mächtige Erweiterungen für flexiblere Datenverarbeitung.
1. takeWhile(Predicate)
Nimmt Elemente aus dem Stream, solange das Prädikat true liefert. Bei geordneten Streams: längster Präfix. Bei ungeordneten: beliebiges Subset.
Stream.of("a", "b", "c", "", "e", "f")
.takeWhile(s -> !s.isEmpty())
.forEach(System.out::print); // Ausgabe: abc
2. dropWhile(Predicate)
Verwirft Elemente vom Anfang, solange das Prädikat true liefert. Gibt den Rest zurück.
Stream.of("a", "b", "c", "", "e", "f")
.dropWhile(s -> !s.isEmpty())
.forEach(System.out::print); // Ausgabe: ef
Stream.of("a", "b", "c", "", "e", "", "f")
.dropWhile(s -> !s.isEmpty())
.forEach(System.out::print); // Ausgabe: ef (nach erstem Leerstring alles)
3. iterate(seed, hasNext, next) – Endbedingung
Die klassische iterate(seed, next) ist unendlich. Die neue Variante nimmt ein Predicate als Abbruchbedingung.
IntStream.iterate(3, x -> x < 10, x -> x + 3)
.forEach(System.out::println);
// Ausgabe: 3, 6, 9 (stopp vor 12, da 12 < 10 false)
Äquivalent zu: for (int x = 3; x < 10; x += 3)
4. ofNullable(T)
Erzeugt einen Stream mit einem Element (wenn nicht null) oder leeren Stream (wenn null). Vermeidet NullPointerException & explizite Null-Checks.
Stream.ofNullable("Hallo").count(); // 1
Stream.ofNullable(null).count(); // 0
// Praktisch in flatMap:
List<String> list = List.of("A", null, "B");
list.stream()
.flatMap(s -> Stream.ofNullable(s)) // null → leerer Stream
.forEach(System.out::println); // A, B
Zusammenfassung
| Methode | Seit | Zweck |
|---|---|---|
takeWhile(pred) |
Java 9 | Präfix nehmen bis Prädikat false |
dropWhile(pred) |
Java 9 | Präfix verwerfen bis Prädikat false |
iterate(seed, hasNext, next) |
Java 9 | Endliche Iteration mit Bedingung |
ofNullable(t) |
Java 9 | Null-sicherer 0/1-Element Stream |
Praxis-Tipps
takeWhile/dropWhilesind Short-Circuiting Operationen – effizient bei unendlichen Streams.- Bei parallelen Streams ist die Semantik „ungeordnet“ – Ergebnis kann variieren.
iteratemithasNextermöglicht endlich lange Sequenzen ohnelimit().ofNullableideal für Optionals-zu-Stream-Konvertierung:optional.stream()(Java 9) macht dasselbe.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java 9 (JDK 9): Wichtigste Features & Vorteile – Modularität, JShell, HTTP/2 & mehr