Programmieren_2/streams.md

52 lines
1.5 KiB
Markdown

<!--
title: Streams
description: Folien für Streams in Programmieren 2
url: https://git.henriburau.de/tutorien/programmieren-2
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Streams
Erleichtert das Verarbeiten von Sammlungen aus den Collection Framework.
---
# Grundlagen
Die [Stream-API](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) bietet Higher Order Functions (HOF) die auf Collections arbeiten. Dazu zählen:
* filter
* map
* fold
Die Verarbeitung erfolgt in drei Schritten: Erzeugung des Streams, Verarbeitung des Streams und zum Schluss Terminieren des Streams.
---
# Beispiel
```java
List<String> liste = new ArrayList<String>();
liste.addAll("was", "geht", "ab", "?");
int laenge = liste.stream().map(text -> text.length()).reduce(0, Integer::sum);
List<String> nurWoerter = liste.stream()
.filter(s -> s.matches("[a-zA-Z]"))
.collect(Collectors.toList());
int nurLangeWoerterLaenge = liste.stream()
.filter(s -> s.matches("[a-zA-Z]"))
.filter(s -> s.length() >= 3)
.map(s -> s.length())
.reduce(0, Integer::sum)
```
[`Stream:reduce(Binary)`](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-T-java.util.function.BinaryOperator-)
---
# Aufgabe
1) Berechne in `SummiererWerkzeug.setzeSumme()` die Summe der einzelnen Zähler mithilfe von Streams.