V Jave výrazy Lambda v podstate vyjadrujú inštancie funkčných rozhraní (Rozhranie s jedinou abstraktnou metódou sa nazýva funkčné rozhranie). Lambda výrazy v Jave sú rovnaké ako lambda funkcie, ktoré sú krátkym blokom kódu, ktorý prijíma vstup ako parametre a vracia výslednú hodnotu. Lambda Expressions sú nedávno zahrnuté v Java SE 8.
Funkcionality Lambda Expression v Jave
Výrazy lambda implementujú jedinú abstraktnú funkciu, a preto implementujú funkčné rozhrania Výrazy lambda sú pridané v jazyku Java 8 a poskytujú nižšie uvedené funkcie.
- Povoliť zaobchádzanie s funkciou ako s argumentom metódy alebo s kódom ako s údajmi.
- Funkcia, ktorá môže byť vytvorená bez toho, aby patrila do akejkoľvek triedy.
- Výraz lambda možno odovzdať, ako keby to bol objekt, a vykonať ho na požiadanie.
Príklad výrazu 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); // Toto zavolá nad lambda výraz a vypíše 10. fobj.abstractFun(5); } }>
Výkon
10>
Syntax lambda výrazu
lambda operator ->telo>
Parametre výrazu lambda
Nižšie sú uvedené tri parametre výrazu lambda:
- Nulový parameter
- Jediný parameter
- Viaceré parametre
1. Lambda výraz s nulovým parametrom
() ->System.out.println('Nulový parameter lambda');>
2. Lambda výraz s jedným parametrom
(p) ->System.out.println('Jeden parameter: ' + p);>
Nie je povinné používať zátvorky, ak typ tejto premennej možno odvodiť z kontextu
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 = nový ArrayList (); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4); // Použitie lambda výrazu na tlač všetkých prvkov // arrL arrL.forEach(n -> System.out.println(n)); // Použitie lambda výrazu na tlač párnych prvkov // arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } }>
Výkon
1 2 3 4 2 4>
Poznámka: že lambda výrazy možno použiť len na implementáciu funkčných rozhraní. Vo vyššie uvedenom príklade sa tiež implementuje výraz lambda Spotrebiteľ Funkčné rozhranie.
3. Lambda výraz s viacerými parametrami
(p1, p2) ->System.out.println('Viaceré parametre: ' + p1 + ', ' + p2);>
Java program na demonštráciu fungovania výrazu lambda s dvoma argumentmi.
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; // násobenie lambda výrazu pre dva // parametre Tento výraz tiež implementuje // 'FuncInter1' rozhranie FuncInter1 multiply = (int x, int y) -> x * y; // Vytvorenie objektu Test na volanie funguje pomocou // rôznych implementácií pomocou lambda // Výrazy Test tobj = new Test(); // Sčítajte dve čísla pomocou lambda výrazu System.out.println('Sčítanie je ' + tobj.operate(6, 3, add)); // Násobenie dvoch čísel pomocou lambda výrazu System.out.println('Násobenie je ' + tobj.operate(6, 3, násobiť)); // lambda výraz pre jeden parameter // Tento výraz implementuje 'FuncInter2' rozhranie FuncInter2 fobj = message -> System.out.println('Ahoj ' + správa); fobj.sayMessage('Geek'); } }>
Výkon
Addition is 9 Multiplication is 18 Hello Geek>
Poznámka: Lambda výrazy sú ako funkcie a akceptujú parametre rovnako ako funkcie.
Záver
Niektoré dôležité body z tohto článku sú uvedené nižšie:
- Telo výrazu lambda môže obsahovať nula, jeden alebo viac príkazov.
- Ak existuje jeden príkaz, zložené zátvorky nie sú povinné a návratový typ anonymnej funkcie je rovnaký ako výraz tela.
- Ak existuje viac ako jeden príkaz, musia byť uvedené v zložených zátvorkách (blok kódu) a návratový typ anonymnej funkcie je rovnaký ako typ hodnoty vrátenej v rámci bloku kódu, alebo neplatný, ak sa nič nevráti. .
Časté otázky v Lambda Expression
Q1. Aký typ výrazu lambda Java?
odpoveď:
Java Lambda Expressions sú krátky blok kódu, ktorý akceptuje vstup ako parametre a vracia výslednú hodnotu.
Q2. Je dobré používať lambda výrazy v Jave?
odpoveď:
Áno, používanie výrazov lambda uľahčuje používanie a podporu iných rozhraní API.
Q3. Aké sú nevýhody Java lambda?
odpoveď:
Funkcie Java lambda možno použiť iba s funkčnými rozhraniami.
Q4. Na základe práve zobrazených pravidiel syntaxe, ktorý z nasledujúcich výrazov je/nie sú platnými výrazmi lambda?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Celé číslo i) -> return geeksforgeeks + i;
- (String s) -> {geeksforgeeks;}
odpoveď:
4 a 5 sú neplatné lambdy, ostatné sú platné. Podrobnosti:
- Táto lambda nemá žiadne parametre a vracia sa neplatná. Je to podobné ako metóda s prázdnym telom: public void run() { }.
- Táto lambda nemá žiadne parametre a vracia reťazec ako výraz.
- Táto lambda nemá žiadne parametre a vracia reťazec (pomocou explicitného príkazu return v rámci bloku).
- return je príkaz control-flow. Aby bola táto lambda platná, sú potrebné zložené zátvorky takto: (Celé číslo i) -> { return geeksforgeeks + i; }.
- geeks for geeks je výraz, nie vyhlásenie. Aby bola táto lambda platná, môžete odstrániť zložené zátvorky a bodkočiarku takto: (String s) -> geeks for geeks. Alebo ak chcete, môžete použiť explicitný príkaz return takto: (String s) -> { return geeks for geeks; }.