logo

Lambda výraz v Jave

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>

lambda výrazSyntax lambda výrazu

 lambda operator ->telo>

Parametre výrazu lambda

Nižšie sú uvedené tri parametre výrazu lambda:

  1. Nulový parameter
  2. Jediný parameter
  3. 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?

  1. () -> {}
  2. () -> geeksforgeeks
  3. () -> { return geeksforgeeks;}
  4. (Celé číslo i) -> return geeksforgeeks + i;
  5. (String s) -> {geeksforgeeks;}

odpoveď:

4 a 5 sú neplatné lambdy, ostatné sú platné. Podrobnosti:

  1. Táto lambda nemá žiadne parametre a vracia sa neplatná. Je to podobné ako metóda s prázdnym telom: public void run() { }.
  2. Táto lambda nemá žiadne parametre a vracia reťazec ako výraz.
  3. Táto lambda nemá žiadne parametre a vracia reťazec (pomocou explicitného príkazu return v rámci bloku).
  4. 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; }.
  5. 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; }.