Lambda-Ausdruck in Java
In Java drücken Lambda-Ausdrücke grundsätzlich Instanzen funktionaler Schnittstellen aus (eine Schnittstelle mit einer einzelnen abstrakten Methode wird als funktionale Schnittstelle bezeichnet). Lambda-Ausdrücke in Java sind dasselbe wie Lambda-Funktionen, bei denen es sich um kurze Codeblöcke handelt, die Eingaben als Parameter akzeptieren und einen resultierenden Wert zurückgeben. Lambda-Ausdrücke sind seit kurzem in Java SE 8 enthalten.
Funktionalitäten des Lambda-Ausdrucks in Java
Lambda-Ausdrücke implementieren die einzige abstrakte Funktion und implementieren daher funktionale Schnittstellen. Lambda-Ausdrücke werden in Java 8 hinzugefügt und stellen die folgenden Funktionalitäten bereit.
- Aktivieren Sie diese Option, um Funktionalität als Methodenargument oder Code als Daten zu behandeln.
- Eine Funktion, die erstellt werden kann, ohne einer Klasse anzugehören.
- Ein Lambda-Ausdruck kann wie ein Objekt weitergegeben und bei Bedarf ausgeführt werden.
Beispiel für einen Java-Lambda-Ausdruck
Java // Java program to demonstrate lambda expressions // to implement a user defined functional interface. // A sample functional interface (An interface with // single abstract method interface FuncInterface { // An abstract function void abstractFun(int x); // A non-abstract (or default) function default void normalFun() { System.out.println('Hello'); } } class Test { public static void main(String args[]) { // lambda expression to implement above // functional interface. This interface // by default implements abstractFun() FuncInterface fobj = (int x)->System.out.println(2*x); // Dies ruft den obigen Lambda-Ausdruck auf und gibt 10 aus. fobj.abstractFun(5); } } Ausgabe
10
Lambda-Ausdruckssyntax
lambda operator ->Körper
Lambda-Ausdrucksparameter
Es gibt drei Lambda-Ausdrucksparameter, die unten aufgeführt sind:
- Nullparameter
- Einzelner Parameter
- Mehrere Parameter
1. Lambda-Ausdruck mit Null-Parameter
() ->System.out.println('Null-Parameter Lambda'); 2. Lambda-Ausdruck mit einzelnem Parameter
(p) ->System.out.println('Ein Parameter: ' + p); Die Verwendung von Klammern ist nicht zwingend erforderlich, wenn der Typ dieser Variablen aus dem Kontext abgeleitet werden kann
Java // A Java program to demonstrate simple lambda expressions import java.util.ArrayList; class Test { public static void main(String args[]) { // Creating an ArrayList with elements // {1, 2, 3, 4} ArrayList arrL = neue ArrayList (); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4); // Lambda-Ausdruck verwenden, um alle Elemente // von arrL zu drucken arrL.forEach(n -> System.out.println(n)); // Lambda-Ausdruck verwenden, um gerade Elemente // von arrL zu drucken arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } } Ausgabe
1 2 3 4 2 4
Notiz: dass Lambda-Ausdrücke nur zur Implementierung funktionaler Schnittstellen verwendet werden können. Auch im obigen Beispiel wird der Lambda-Ausdruck implementiert Verbraucher Funktionsschnittstelle.
3. Lambda-Ausdruck mit mehreren Parametern
(p1, p2) ->System.out.println('Mehrere Parameter: ' + p1 + ', ' + p2); Ein Java-Programm zur Demonstration der Funktionsweise eines Lambda-Ausdrucks mit zwei Argumenten.
Java // Java program to demonstrate working of lambda expressions public class Test { // operation is implemented using lambda expressions interface FuncInter1 { int operation(int a, int b); } // sayMessage() is implemented using lambda expressions // above interface FuncInter2 { void sayMessage(String message); } // Performs FuncInter1's operation on 'a' and 'b' private int operate(int a, int b, FuncInter1 fobj) { return fobj.operation(a, b); } public static void main(String args[]) { // lambda expression for addition for two parameters // data type for x and y is optional. // This expression implements 'FuncInter1' interface FuncInter1 add = (int x, int y) ->x + y; // Lambda-Ausdrucksmultiplikation für zwei // Parameter Dieser Ausdruck implementiert auch // 'FuncInter1' Schnittstelle FuncInter1 multiply = (int x, int y) -> x * y; // Erstellen eines Testobjekts zum Aufrufen von Operate mit // verschiedenen Implementierungen mithilfe von Lambda // Ausdrücke Test tobj = new Test(); // Addiere zwei Zahlen mit dem Lambda-Ausdruck System.out.println('Addition is ' + tobj.operate(6, 3, add)); // Multipliziere zwei Zahlen mit dem Lambda-Ausdruck System.out.println('Multiplication is ' + tobj.operate(6, 3, multiply)); // Lambda-Ausdruck für einzelnen Parameter // Dieser Ausdruck implementiert die Schnittstelle „FuncInter2“ FuncInter2 fobj = message -> System.out.println('Hello ' + message); fobj.sayMessage('Geek'); } } Ausgabe
Addition is 9 Multiplication is 18 Hello Geek
Notiz: Lambda-Ausdrücke sind wie Funktionen und akzeptieren Parameter wie Funktionen.
Abschluss
Nachfolgend sind einige wichtige Punkte aus diesem Artikel aufgeführt:
- Der Hauptteil eines Lambda-Ausdrucks kann null, eine oder mehrere Anweisungen enthalten.
- Bei einer einzelnen Anweisung sind geschweifte Klammern nicht zwingend erforderlich und der Rückgabetyp der anonymen Funktion ist derselbe wie der des Hauptausdrucks.
- Wenn es mehr als eine Anweisung gibt, müssen diese in geschweifte Klammern eingeschlossen werden (ein Codeblock) und der Rückgabetyp der anonymen Funktion ist derselbe wie der Typ des im Codeblock zurückgegebenen Werts oder ungültig, wenn nichts zurückgegeben wird .
FAQs in Lambda Expression
Q1. Welche Art von Lambda-Ausdruck Java?
Antwort:
Java-Lambda-Ausdrücke sind kurze Codeblöcke, die Eingaben als Parameter akzeptieren und einen resultierenden Wert zurückgeben.
Q2. Ist es sinnvoll, Lambda-Ausdrücke in Java zu verwenden?
Antwort:
Ja, die Verwendung von Lambda-Ausdrücken erleichtert die Verwendung und Unterstützung anderer APIs.
Q3. Was sind die Nachteile von Java Lambda?
Antwort:
Java-Lambda-Funktionen können nur mit funktionalen Schnittstellen verwendet werden.
Q4. Welcher der folgenden ist/sind KEINE gültigen Lambda-Ausdrücke, basierend auf den gerade gezeigten Syntaxregeln?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Integer i) -> return geeksforgeeks + i;
- (String s) -> {geeksforgeeks;}
Antwort:
4 und 5 sind ungültige Lambdas, der Rest ist gültig. Einzelheiten:
- Dieses Lambda hat keine Parameter und gibt „void“ zurück. Es ähnelt einer Methode mit leerem Körper: public void run() { }.
- Dieses Lambda hat keine Parameter und gibt einen String als Ausdruck zurück.
- Dieses Lambda hat keine Parameter und gibt einen String zurück (unter Verwendung einer expliziten Return-Anweisung innerhalb eines Blocks).
- return ist eine Kontrollflussanweisung. Um dieses Lambda gültig zu machen, sind geschweifte Klammern wie folgt erforderlich: (Integer i) -> { return geeksforgeeks + i; }.
- Geeks für Geeks ist ein Ausdruck, keine Aussage. Um dieses Lambda gültig zu machen, können Sie die geschweiften Klammern und das Semikolon wie folgt entfernen: (String s) -> Geeks für Geeks. Wenn Sie möchten, können Sie auch eine explizite Return-Anweisung wie folgt verwenden: (String s) -> { return geeks for geeks; }.