diff --git a/05-termin.md b/05-termin.md new file mode 100644 index 0000000..2911cb4 --- /dev/null +++ b/05-termin.md @@ -0,0 +1,31 @@ + + +# Termin 5 + +--- + +# Fragen + +--- + +# Links +[https://git.haw-hamburg.de/pm2-tutorium](https://git.haw-hamburg.de/pm2-tutorium) +- Aufgaben +- Tutoriumsfolien + +--- + +# Plan für heute + +Level 6 Themen: + +- Werkzeug & Material-Ansatz +- Entwurfsmuster +- **Lambdas** +- **Streams** diff --git a/lambdas.md b/lambdas.md new file mode 100644 index 0000000..04c9f9c --- /dev/null +++ b/lambdas.md @@ -0,0 +1,73 @@ + + +# Lambdas + +--- + +# Grundlagen + +Erlauben das Implementieren von Interfaces mit nur einer Methode. + +Klassischerweise wurde dieses Problem mithilfe von anonymen inneren Klassen gelöst. Lambda-Ausdrücke sparen im Vergleich dazu deutlich an Code. + +--- + +# Beispiel + +Lambda +```java +_zaehlerUI.gibErhoeheButton().setOnAction(event -> { + _zaehler.zaehleHoch(); + informiereUeberAenderung(); + }); +``` + +Anonyme innere Klasse +```java +_zaehlerUI.gibErhoeheButton().setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + _zaehler.zaehleHoch(); + informiereUeberAenderung(); + } +}); +``` +--- + +# Beispiel + +```java +// Lambda ohne explizite Typen und return (type inference) +x -> x * 2 + +// Lambda mit explitizen Typen der formalen Parameter +(int x, int y) -> x + y + +// Lambda mit return +(int x, int y) -> { return x * y + 2 } +``` + +--- + +# Deklaration + +```java +@FunctionalInterface +public interface Filter { + bool istGueltig(T obj); +} +``` + +```java +Filter langGenug = (String text) -> text.length() > 10; +``` + +# Aufgabe + +1) Die Klasse `ZaehlerWerkzeug` nutzt das Interface `Observer` um Änderungen von Subwerkzeugen zu erhalten. `ZaehlerWerkzeug` registriert sich mithilfe von anonymen inneren Klassen. Baue das System der Observer um, sodass Lambdas genutzt werden. diff --git a/streams.md b/streams.md new file mode 100644 index 0000000..f4f2a93 --- /dev/null +++ b/streams.md @@ -0,0 +1,51 @@ + + +# 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 liste = new ArrayList(); +liste.addAll("was", "geht", "ab", "?"); + +int laenge = liste.stream().map(text -> text.length()).reduce(0, Integer::sum); + +List 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.