Zur Hauptnavigation springen [Alt]+[0] Zum Seiteninhalt springen [Alt]+[1]

Lambda-Ausdrücke

 

In Java ist es nicht möglich, Funktionen als Parameter zu übergeben. Ist dies nötig, werden Schnittstellen (Interfaces) definiert, die die notwendige Methode abstract definieren. Wollte man eine Methode übergeben, musste man vor Java 8 eine Klasse definieren, die dieses Interface implementierte und dann ein Objekt dieser Klasse übergeben. Durch die Definition des Interfaces war sichergestellt, dass das Objekt die notwendige Methode enthielt.

Beispiel: Sortieren von Arrays

class Vergleich implements Comparator {
   int compare(Integer zahl1, Integer zahl2) {
   if(zahl1 > zahl2) return 1; else return 0;
} 
…
Arrays.sort(zahlenliste, new Vergleich());

Seit Java 8 gibt es ein neues Sprachelement – den Lambda-Ausdruck, der es erlaubt, dies kompakter zu schreiben. Immer wenn eine Schnittstelle nur eine einzige Methode enthält – man nennt sie dann funktionale Schnittstelle –, dann kann ein Lambda-Ausdruck eingesetzt werden.

Beispiel: Array-Sortierung

Arrays.sort(zahlenliste, 
         (Integer zahl1, Integer zahl2) -> 
         {if(zahl1  >  zahl2) return 1; else return 0;}
);

Beispie: Action-Listener

sLaenge.valueProperty().addListener(
         (observable, oldValue, newValue) -> stricheln(alt)
);

Die Methode addListener erwartet eigentlich ein Objekt einer Klasse, die die Schnittstelle ChangeListener implementiert. In dieser Schnittstelle ist eine Methode changed(ObservableValue observable, T oldValue, T newValue) definiert. Die Parameter dieser Methode müssen in einem Lambda-Ausdruck in der ersten Klammer stehen, dann folgt das Zeichen -> und dann die Befehle, die die abstrakte Methode changed implementieren. In diesem Befehl wird also eine Klasse definiert, die ChangeListener implementiert, wobei der Code automatisch der (einzigen) Methode zugeordnet wird, die dieses Interface enthält. Davon wird ein Objekt erzeugt und der Methode addListener übergeben.

Das klingt alles sehr kompliziert, lässt sich aber sehr intuitiv nutzen. Die SuS sollen an dieser Stelle nicht die Hintergründe von Lambda-Ausdrücken verstehen. Dieses würde fundierte Kenntnisse der objektorientierten Programmierung voraussetzen. Sie nutzen dieses Sprachmittel, indem sie den vorgegebenen Quelltext anpassen, um eigene Lambda-Ausdrücke zu erstellen.

 

Hintergrund GUI-Programmierung: Herunterladen [odt][289 KB]

Hintergrund GUI-Programmierung: Herunterladen [pdf][517 KB]

 

Weiter zu Kopiervorlagen