# 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.