Lambdas & Streams
Lambdas, Streams und Optional bringen funktionale Ideen nach Java — kompakter Code für Datenverarbeitung.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Mini-Erfolg
Du hast eine Liste gefiltert, transformiert und sortiert, ohne eine einzige Schleife zu schreiben.
Warum das wichtig ist: Lambdas und Streams machen Datenverarbeitung kürzer und lesbarer — wenn man sie nicht übertreibt.
Das darf schwer sein
Das ist ein Fortgeschrittenen-Thema. Lies es einmal in Ruhe, baue das Mini-Projekt und komm später zurück. Du musst es nicht sofort können.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
Lambdas
Ein Lambda ist eine anonyme Funktion: (parameter) -> ausdruck.
Es implementiert ein funktionales Interface wie Predicate oder Function.
namen.forEach(name -> System.out.println(name));
// oder mit Methodenreferenz:
namen.forEach(System.out::println);Streams
Streams verarbeiten Collections in Schritten: filtern, transformieren, sammeln.
filter, map und collect entsprechen den Array-Methoden aus JavaScript.
List<String> grosse = namen.stream()
.filter(n -> n.length() > 3)
.map(String::toUpperCase)
.toList();Optional
Optional macht sichtbar, dass ein Wert fehlen kann — statt heimlicher null-Werte.
orElse liefert einen Ersatzwert, ifPresent führt Code nur bei Vorhandensein aus.
Optional<String> erster = namen.stream()
.filter(n -> n.startsWith("A"))
.findFirst();
String name = erster.orElse("Niemand");Vertiefung
Deklarativ statt Schleife
Streams beschreiben, was mit den Daten passieren soll: filtern, transformieren, sortieren, sammeln. Die Schleife im Detail übernimmt die Bibliothek.
Streams sind lazy: filter und map laufen erst, wenn eine Endoperation wie toList() oder forEach() kommt. Optional ist kein Ersatz für jede null-Prüfung, aber ein ehrlicher Hinweis auf ein mögliches Fehlen.
List<String> titel = karten.stream()
.filter(k -> k.modul().equals("java"))
.map(k -> k.titel().toUpperCase())
.sorted()
.toList();Merksatz: Streams machen Datenflüsse lesbar. Nicht jede Schleife ersetzen — bei komplexer Logik ist eine normale Schleife oft klarer.
Übungsaufgabe
Lernkarten-Filter
Baue eine Liste von Lernkarten (Record), filtere nach Modul, wandle Titel in Großbuchstaben um und sortiere sie.
Das soll dein Programm können
- Record Lernkarte(Modul, Titel)
- Filter nach einem Modul
- map auf Großbuchstaben
- sorted und toList
Schreibe den Code hier oder in deiner IDE und vergleiche ihn dann mit der Lösung.
Dein Code wird automatisch auf diesem Gerät gespeichert.
Hinweis anzeigen
Die Kette beginnt mit karten.stream(). Für den Modulvergleich bietet sich equals an; für die Ausgabe forEach(System.out::println).
Lösung anzeigen
import java.util.*;
public class KartenFilter {
record Lernkarte(String modul, String titel) {}
public static void main(String[] args) {
List<Lernkarte> karten = List.of(
new Lernkarte("java", "Generics"),
new Lernkarte("html", "Semantik"),
new Lernkarte("java", "Streams")
);
List<String> titel = karten.stream()
.filter(k -> k.modul().equals("java"))
.map(k -> k.titel().toUpperCase())
.sorted()
.toList();
titel.forEach(System.out::println);
}
}Warum funktioniert das?
Die Pipeline ist von oben nach unten lesbar: Quelle, Filter, Transformation, Sortierung, Ergebnis. Der Ursprungsliste wird nichts verändert.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Spaßprojekt
Lernkarten-Filter
Baue eine Liste von Lernkarten, filtere nach Modul, gib die Titel in Großbuchstaben aus und sortiere sie.
Selbstcheck
Kann ich das schon?
Hake ab, was du wirklich erklären oder selbst bauen könntest.
Fortschritt
Bereit zum Abschließen?
Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.