logo

Lambda výraz v Javě

V Javě výrazy Lambda v podstatě vyjadřují instance funkčních rozhraní (Rozhraní s jedinou abstraktní metodou se nazývá funkční rozhraní). Lambda výrazy v Javě jsou stejné jako lambda funkce, což je krátký blok kódu, který přijímá vstup jako parametry a vrací výslednou hodnotu. Lambda Expressions jsou nedávno zahrnuty do Java SE 8.

Funkcionality Lambda Expression v Javě

Výrazy lambda implementují jedinou abstraktní funkci, a proto implementují funkční rozhraní Výrazy lambda jsou přidány do Java 8 a poskytují níže uvedené funkce.



  • Povolit, aby byla funkce považována za argument metody nebo kód jako data.
  • Funkce, kterou lze vytvořit, aniž by patřila do jakékoli třídy.
  • Výraz lambda lze předat, jako by to byl objekt, a spustit jej na vyžádání.

Příklad výrazu Java Lambda

Jáva
// 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ýstup
10>

lambda výrazSyntaxe lambda výrazu

 lambda operator ->tělo>

Parametry lambda výrazu

Níže jsou uvedeny tři parametry lambda výrazu:

  1. Nulový parametr
  2. Jediný parametr
  3. Více parametrů

1. Lambda výraz s nulovým parametrem

() ->System.out.println('Nulový parametr lambda');>

2. Lambda výraz s jedním parametrem

(p) ->System.out.println('Jeden parametr: ' + p);>

Není povinné používat závorky, pokud lze typ této proměnné odvodit z kontextu

Jáva
// 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žití výrazu lambda k tisku všech prvků // arrL arrL.forEach(n -> System.out.println(n));  // Použití lambda výrazu k tisku sudých prvků // arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); });  } }>

Výstup
1 2 3 4 2 4>

Poznámka: že výrazy lambda lze použít pouze k implementaci funkčních rozhraní. Ve výše uvedeném příkladu také implementuje výraz lambda Spotřebitel Funkční rozhraní.



3. Lambda výraz s více parametry

(p1, p2) ->System.out.println('Více parametrů: ' + p1 + ', ' + p2);>

Java program pro demonstraci fungování lambda výrazu se dvěma argumenty.

Jáva
// 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ásobení výrazu lambda pro dva // parametry Tento výraz také implementuje // 'FuncInter1' rozhraní FuncInter1 multiply = (int x, int y) -> x * y;  // Vytvoření objektu Test k volání funguje pomocí // různých implementací pomocí lambda // Výrazy Test tobj = new Test();  // Sečtení dvou čísel pomocí lambda výrazu System.out.println('Sčítání je ' + tobj.operate(6, 3, add));  // Vynásobte dvě čísla pomocí lambda výrazu System.out.println('Násobení je ' + tobj.operate(6, 3, násobte));  // lambda výraz pro jeden parametr // Tento výraz implementuje 'FuncInter2' rozhraní FuncInter2 fobj = message -> System.out.println('Ahoj ' + zpráva);  fobj.sayMessage('Geek');  } }>

Výstup
Addition is 9 Multiplication is 18 Hello Geek>

Poznámka: Lambda výrazy jsou jako funkce a přijímají parametry stejně jako funkce.

Závěr

Některé důležité body z tohoto článku jsou uvedeny níže:



  • Tělo výrazu lambda může obsahovat nula, jeden nebo více příkazů.
  • Pokud existuje jeden příkaz, složené závorky nejsou povinné a návratový typ anonymní funkce je stejný jako u výrazu body.
  • Pokud existuje více než jeden příkaz, musí být uzavřeny ve složených závorkách (blok kódu) a návratový typ anonymní funkce je stejný jako typ hodnoty vrácené v bloku kódu, nebo neplatný, pokud není vráceno nic. .

Nejčastější dotazy v Lambda Expression

Q1. Jaký typ lambda výrazu Java?

Odpovědět:

Java Lambda Expressions jsou krátký blok kódu, který přijímá vstup jako parametry a vrací výslednou hodnotu.

Q2. Je dobré používat lambda výrazy v Javě?

Odpovědět:

Ano, používání výrazů lambda usnadňuje používání a podporu dalších rozhraní API.

Q3. Jaké jsou nevýhody Java lambda?

Odpovědět:

Funkce Java lambda lze používat pouze s funkčními rozhraními.

Q4. Na základě právě uvedených pravidel syntaxe, který z následujících výrazů je/nejsou platnými výrazy lambda?

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

Odpovědět:

4 a 5 jsou neplatné lambdy, zbytek platí. Podrobnosti:

  1. Tato lambda nemá žádné parametry a vrací se void. Je to podobné metodě s prázdným tělem: public void run() { }.
  2. Tato lambda nemá žádné parametry a vrací řetězec jako výraz.
  3. Tato lambda nemá žádné parametry a vrací řetězec (pomocí explicitního příkazu return v rámci bloku).
  4. return je příkaz control-flow. Aby byla tato lambda platná, jsou vyžadovány složené závorky takto: (Celé číslo i) -> { return geeksforgeeks + i; }.
  5. geeks for geeks je výraz, nikoli prohlášení. Aby byla tato lambda platná, můžete odstranit složené závorky a středník následovně: (Řetězce s) -> geekové pro geeky. Nebo pokud chcete, můžete použít explicitní příkaz return takto: (String s) -> { return geeks for geeks; }.