În Java, expresiile Lambda exprimă practic instanțe de interfețe funcționale (O interfață cu o singură metodă abstractă se numește interfață funcțională). Expresiile Lambda în Java sunt aceleași cu funcțiile lambda, care sunt blocul scurt de cod care acceptă intrarea ca parametri și returnează o valoare rezultată. Expresiile Lambda au fost incluse recent în Java SE 8.
Funcționalitățile expresiei Lambda în Java
Expresiile Lambda implementează singura funcție abstractă și, prin urmare, implementează interfețe funcționale. Expresiile lambda sunt adăugate în Java 8 și oferă funcționalitățile de mai jos.
- Activați pentru a trata funcționalitatea ca un argument de metodă sau codul ca date.
- O funcție care poate fi creată fără a aparține vreunei clase.
- O expresie lambda poate fi transmisă ca și cum ar fi un obiect și executată la cerere.
Exemplu de expresie Java Lambda
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); // Aceasta apelează expresia lambda de mai sus și afișează 10. fobj.abstractFun(5); } }>>>
Ieșire 10>
Sintaxa expresiei Lambda
- Parametru zero
- Un singur parametru
- Parametri multipli
1. Expresie Lambda cu parametrul Zero
2. Expresie Lambda cu un singur parametru
Nu este obligatoriu să folosiți paranteze dacă tipul acelei variabile poate fi dedus din context
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 = noua ArrayList (); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4); // Folosind expresia lambda pentru a imprima toate elementele // ale arrL arrL.forEach(n -> System.out.println(n)); // Folosind expresia lambda pentru a imprima elemente pare // ale arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } }>>> Ieșire
3. Expresie Lambda cu parametri multipli
Un program Java pentru a demonstra funcționarea unei expresii lambda cu două argumente.
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; // Înmulțirea expresiei lambda pentru doi // parametri Această expresie implementează și // interfața 'FuncInter1' FuncInter1 multiplicare = (int x, int y) -> x * y; // Crearea unui obiect de Test pentru a apela operate folosind // implementări diferite folosind lambda // Expresii Test tobj = new Test(); // Adăugați două numere folosind expresia lambda System.out.println('Adăugarea este ' + tobj.operate(6, 3, add)); // Înmulțim două numere folosind expresia lambda System.out.println('Multiplicarea este ' + tobj.operate(6, 3, multiplica)); // expresie lambda pentru un singur parametru // Această expresie implementează interfața 'FuncInter2' FuncInter2 fobj = message -> System.out.println('Hello ' + message); fobj.sayMessage('Geek'); } }>>>Ieșire
Concluzie
Câteva puncte importante din acest articol sunt menționate mai jos:
- Corpul unei expresii lambda poate conține zero, una sau mai multe instrucțiuni.
- Când există o singură instrucțiune, parantezele nu sunt obligatorii și tipul de returnare al funcției anonime este același cu cel al expresiei corpului.
- Când există mai multe instrucțiuni, acestea trebuie incluse între paranteze (un bloc de cod) și tipul de returnare al funcției anonime este același cu tipul valorii returnate în blocul de cod, sau nul dacă nu se returnează nimic. .
Întrebări frecvente în Lambda Expression
Î1. Ce tip de expresie lambda Java?
Răspuns:
Expresiile Java Lambda sunt blocul scurt de cod care acceptă intrarea ca parametri și returnează o valoare rezultată.
Q2. Este bine să folosiți expresii lambda în Java?
Răspuns:
Da, utilizarea expresiilor lambda facilitează utilizarea și acceptarea altor API-uri.
Q3. Care sunt dezavantajele Java lambda?
Răspuns:
Funcțiile lambda Java pot fi utilizate numai cu interfețe funcționale.
Î4. Pe baza regulilor de sintaxă tocmai arătate, care dintre următoarele NU este/nu sunt expresii lambda valide?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Integer i) -> return geeksforgeeks + i;
- (Șir s) -> {geeksforgeeks;}
Răspuns:
4 și 5 sunt lambda invalide, restul sunt valide. Detalii:
- Acest lambda nu are parametri și returnează void. Este similar cu o metodă cu un corp gol: public void run() { }.
- Acest lambda nu are parametri și returnează un String ca expresie.
- Acest lambda nu are parametri și returnează un String (folosind o instrucțiune de returnare explicită, în cadrul unui bloc).
- return este o instrucțiune de control-flux. Pentru ca acest lambda să fie valabil, sunt necesare bretele după cum urmează: (Integer i) -> { return geeksforgeeks + i; }.
- geeks for geeks este o expresie, nu o afirmație. Pentru ca această lambda să fie valabilă, puteți elimina acoladele și punctul și virgulă după cum urmează: (String s) -> geeks for geeks. Sau, dacă preferați, puteți utiliza o declarație de returnare explicită după cum urmează: (String s) -> { return geeks for geeks; }.
