Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 2 von 214/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Stream API

Die Stream API in Java ermöglicht die deklarative Verarbeitung von Objektsammlungen unter Nutzung funktionaler Programmierung. Ein Stream speichert keine Daten, sondern transportiert die Elemente aus einer Quelle (wie einer Liste oder einem Array) durch eine Pipeline von Operationen.

Eine Stream-Pipeline besteht aus drei Teilen:

  1. Einer Quelle (z. B. list.stream())
  2. Null oder mehr Zwischenoperationen (die einen neuen Stream zurückgeben, z. B. filter, map)
  3. Einer Terminaloperation (die ein Endergebnis oder einen Seiteneffekt erzeugt und den Stream schließt, z. B. collect, forEach, reduce)

Häufige Zwischenoperationen

Zwischenoperationen sind "lazy" (träge): Sie werden erst ausgeführt, wenn eine Terminaloperation aufgerufen wird.

  • filter(Predicate): Filtert Elemente basierend auf einer booleschen Bedingung.
  • map(Function): Transformiert jedes Element durch Anwendung einer Funktion in ein anderes Objekt.
  • sorted(): Sortiert die Elemente des Streams.
Code
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

Häufige Terminaloperationen

  • forEach(Consumer): Führt eine Aktion für jedes Element des Streams aus.
  • collect(Collector): Sammelt die Ergebnisse des Streams in einem Container (z. B. eine Liste mittels Collectors.toList()).
  • reduce(identity, BinaryOperator): Kombiniert die Elemente des Streams zu einem einzigen kumulativen Wert.
Code
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Somma tutti i numeri: 10

Probiere es aus

Übung#java.m7.l2.e1
Versuche: 0Wird geladen…

Vervollständigen Sie den Code, indem Sie den Ressourcen-Stream verwenden, um nur gerade Zahlen zu filtern, diese in einer neuen List namens evens zu sammeln und sie mit System.out.println auszugeben.

Editor wird geladen…
Hinweis anzeigen

Beginnen Sie mit dem Aufruf von `numbers.stream()`, fügen Sie `.filter(n -> n % 2 == 0)` hinzu und sammeln Sie schließlich mit `.collect(Collectors.toList())`.

Lösung nach 3 Versuchen verfügbar

Übung#java.m7.l2.e2
Versuche: 0Wird geladen…

Verwenden Sie Streams, um alle Namen in der Liste names mittels map in Großbuchstaben umzuwandeln, und geben Sie sie einzeln mit forEach unter Verwendung von System.lineSeparator oder einer Methodenreferenz aus.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie `.map(s -> s.toUpperCase())`, gefolgt von der Terminaloperation `.forEach(System.out::println)`.

Lösung nach 3 Versuchen verfügbar

Übung#java.m7.l2.e3
Versuche: 0Wird geladen…

Vervollständigen Sie den Code, indem Sie die Summe aller Zahlen in der Liste numbers mithilfe eines Streams und der Terminaloperation reduce mit dem Startwert 0 berechnen. Geben Sie das Ergebnis aus.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie `numbers.stream().reduce(0, (a, b) -> a + b)` und geben Sie die Variable aus, die das Ergebnis enthält.

Lösung nach 3 Versuchen verfügbar