16 Lambdas und Streams

16.1 Lambdas

Lambda-Ausdrücke in Java ermöglichen die kurze und klare Darstellung von Instanzen funktionaler Schnittstellen.

16.1.1 Syntax

(a, b) -> a + b

16.1.2 Beispiel

Runnable r = () -> System.out.println("Hallo Welt");

16.2 Methodenreferenzen

Methodenreferenzen sind eine Kurzform für Lambda-Ausdrücke, die nur eine Methode aufrufen.

System.out::println

16.3 Streams

Streams bieten eine Möglichkeit, Sequenzen von Daten in einer funktionalen Stil zu manipulieren.

16.3.1 Erzeugen eines Streams

Stream<String> stream = Stream.of("a", "b", "c");

16.3.2 Operationen

16.3.2.1 Filter

stream.filter(s -> s.startsWith("a")).forEach(System.out::println);

16.3.2.2 Map

stream.map(String::toUpperCase).forEach(System.out::println);

16.3.2.3 Reduce

Optional<String> result = stream.reduce((a, b) -> a + b);

16.3.3 Parallele Streams

Streams können parallelisiert werden, um die Leistung zu verbessern.

stream.parallel().forEach(System.out::println);

16.4 Beispiele für kombinierte Nutzung

16.4.1 Filter und Map

List<String> list = Arrays.asList("a", "b", "c");
list.stream().filter(s -> s.startsWith("a")).map(String::toUpperCase).forEach(System.out::println);

16.4.2 Sammeln in einer Liste

List<String> newList = stream.collect(Collectors.toList());

Lambda-Ausdrücke und Streams sind Schlüsselmerkmale der funktionalen Programmierung in Java. Lambdas ermöglichen es, Instanzen funktionaler Schnittstellen kurz und prägnant zu repräsentieren, während Streams die Verarbeitung von Datensequenzen in einer deklarativen Weise erleichtern. Sie können auch für die parallele Datenverarbeitung verwendet werden, um die Leistung zu steigern.