Zwischenstufe Java Tag 7: Streams & Lambda-Ausdrücke

Ziel dieses Tages

Heute wirst du lernen:

Am Ende wirst du in der Lage sein, Streams und Lambdas zu nutzen, um Collections kompakt zu verarbeiten.

Schritt 1: Grundlagen von Java Streams

Streams ermöglichen es dir, Operationen auf Collections im funktionalen Stil auszuführen.


import java.util.Arrays;
import java.util.List;

List numbers = Arrays.asList(1, 2, 3, 4, 5);

numbers.stream().forEach(n -> System.out.println(n));

Schritt 2: filter, map, reduce

Streams unterstützen Operationen wie filter, map und reduce.


// Summe der geraden Zahlen
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n)
                 .sum();

System.out.println("Summe der geraden Zahlen: " + sum);

Schritt 3: Lambda-Ausdrücke

Lambda-Ausdrücke bieten eine kompakte Möglichkeit, anonyme Funktionen zu schreiben.


numbers.forEach(n -> System.out.println(n * 2));

Erklärung:

Schritt 4: Einfache funktionale Programmierung

Streams ermöglichen das Verkettung mehrerer Operationen für sauberen und lesbaren Code.


int maxEven = numbers.stream()
                     .filter(n -> n % 2 == 0)
                     .mapToInt(n -> n)
                     .max()
                     .orElse(0);

System.out.println("Größte gerade Zahl: " + maxEven);

Übung


List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n)
                 .sum();
System.out.println("Summe der geraden Zahlen: " + sum);

Aufgabe

Finde den maximalen Wert in einer Liste mit Streams.

Schritte:

Beispiel:


import java.util.Arrays;
import java.util.List;

public class MaxValueStream {
    public static void main(String[] args) {
        List numbers = Arrays.asList(10, 3, 25, 7, 18);

        int max = numbers.stream()
                         .max(Integer::compare)
                         .orElse(Integer.MIN_VALUE);

        System.out.println("Größter Wert: " + max);
    }
}