Java -Lambda-Ausdrücke
Java-Lambda-Ausdrücke
Lambda-Ausdrücke wurden in Java 8 hinzugefügt.
Ein Lambda-Ausdruck ist ein kurzer Codeblock, der Parameter aufnimmt und einen Wert zurückgibt. Lambda-Ausdrücke ähneln Methoden, benötigen jedoch keinen Namen und können direkt im Hauptteil einer Methode implementiert werden.
Syntax
Der einfachste Lambda-Ausdruck enthält einen einzelnen Parameter und einen Ausdruck:
parameter -> expression
Um mehr als einen Parameter zu verwenden, schließen Sie sie in Klammern ein:
(parameter1, parameter2) -> expression
Ausdrücke sind begrenzt. Sie müssen sofort einen Wert zurückgeben und dürfen keine Variablen, Zuweisungen oder Anweisungen wie if
oder enthalten for
. Um komplexere Operationen durchzuführen, kann ein Codeblock mit geschweiften Klammern verwendet werden. Wenn der Lambda-Ausdruck einen Wert zurückgeben muss, sollte der Codeblock eine return
Anweisung enthalten.
(parameter1, parameter2) -> { code block }
Verwenden von Lambda-Ausdrücken
Lambda-Ausdrücke werden normalerweise als Parameter an eine Funktion übergeben:
Beispiel
Verwenden Sie einen Lamba-Ausdruck in der ArrayList
's- forEach()
Methode, um jedes Element in der Liste zu drucken:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
Lambda-Ausdrücke können in Variablen gespeichert werden, wenn der Variablentyp eine Schnittstelle ist, die nur eine Methode hat. Der Lambda-Ausdruck sollte die gleiche Anzahl von Parametern und den gleichen Rückgabetyp wie diese Methode haben. Java hat viele dieser Arten von Schnittstellen eingebaut, wie zum Beispiel die Consumer
Schnittstelle (im java.util
Paket enthalten), die von Listen verwendet wird.
Beispiel
Verwenden Sie die Java- Consumer
Schnittstelle, um einen Lambda-Ausdruck in einer Variablen zu speichern:
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
Um einen Lambda-Ausdruck in einer Methode zu verwenden, sollte die Methode einen Parameter mit einer Single-Method-Schnittstelle als Typ haben. Beim Aufrufen der Methode der Schnittstelle wird der Lambda-Ausdruck ausgeführt:
Beispiel
Erstellen Sie eine Methode, die einen Lambda-Ausdruck als Parameter verwendet:
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}