Java 8 - Lambda-Ausdrücke
Lambda-Ausdrücke werden in Java 8 eingeführt und gelten als das größte Feature von Java 8. Lambda-Ausdrücke erleichtern die funktionale Programmierung und vereinfachen die Entwicklung erheblich.
Syntax
Ein Lambda-Ausdruck ist durch die folgende Syntax gekennzeichnet.
parameter -> expression body
Im Folgenden sind die wichtigen Merkmale eines Lambda-Ausdrucks aufgeführt.
-
Optionale Typdeklaration − Der Typ eines Parameters muss nicht deklariert werden. Der Compiler kann aus dem Wert des Parameters darauf schließen.
-
Optionale Klammern um den Parameter − Keine Notwendigkeit, einen einzelnen Parameter in Klammern zu deklarieren. Bei mehreren Parametern sind Klammern erforderlich.
-
Optionale geschweifte Klammern − Keine Notwendigkeit, geschweifte Klammern im Ausdruckskörper zu verwenden, wenn der Körper eine einzelne Anweisung enthält.
-
Optionales Rückgabeschlüsselwort − Der Compiler gibt den Wert automatisch zurück, wenn der Körper einen einzigen Ausdruck hat, um den Wert zurückzugeben. Geschweifte Klammern sind erforderlich, um anzuzeigen, dass der Ausdruck einen Wert zurückgibt.
Beispiel für Lambda-Ausdrücke
Erstellen Sie das folgende Java-Programm mit einem beliebigen Editor Ihrer Wahl in beispielsweise C:\> JAVA.
Java8Tester.java
Live-Demopublic class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
Überprüfen Sie das Ergebnis
Kompilieren Sie die Klasse mit javac Compiler wie folgt −
C:\JAVA>javac Java8Tester.java
Führen Sie nun den Java8Tester wie folgt aus −
C:\JAVA>java Java8Tester
Es sollte die folgende Ausgabe erzeugen −
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
Im Folgenden sind die wichtigen Punkte aufgeführt, die im obigen Beispiel berücksichtigt werden müssen.
-
Lambda-Ausdrücke werden hauptsächlich verwendet, um die Inline-Implementierung einer funktionalen Schnittstelle zu definieren, d. h. einer Schnittstelle mit nur einer einzigen Methode. Im obigen Beispiel haben wir verschiedene Arten von Lambda-Ausdrücken verwendet, um die Operationsmethode der MathOperation-Schnittstelle zu definieren. Dann haben wir die Implementierung von sayMessage von GreetingService definiert.
-
Der Lambda-Ausdruck eliminiert die Notwendigkeit einer anonymen Klasse und gibt Java eine sehr einfache, aber leistungsstarke funktionale Programmierfähigkeit.
Geltungsbereich
Mit dem Lambda-Ausdruck können Sie auf jede Endvariable oder effektiv Endvariable (die nur einmal zugewiesen wird) verweisen. Der Lambda-Ausdruck löst einen Kompilierungsfehler aus, wenn einer Variablen zum zweiten Mal ein Wert zugewiesen wird.
Umfangsbeispiel
Erstellen Sie das folgende Java-Programm mit einem beliebigen Editor Ihrer Wahl in beispielsweise C:\> JAVA.
Java8Tester.java
Live-Demopublic class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]) { GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
Überprüfen Sie das Ergebnis
Kompilieren Sie die Klasse mit javac Compiler wie folgt −
C:\JAVA>javac Java8Tester.java
Führen Sie nun den Java8Tester wie folgt aus −
C:\JAVA>java Java8Tester
Es sollte die folgende Ausgabe erzeugen −
Hello! Mahesh
Java