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>
Syntaxe lambda výrazu
lambda operator ->tělo>
Parametry lambda výrazu
Níže jsou uvedeny tři parametry lambda výrazu:
- Nulový parametr
- Jediný parametr
- 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?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Celé číslo i) -> return geeksforgeeks + i;
- (String s) -> {geeksforgeeks;}
Odpovědět:
4 a 5 jsou neplatné lambdy, zbytek platí. Podrobnosti:
- Tato lambda nemá žádné parametry a vrací se void. Je to podobné metodě s prázdným tělem: public void run() { }.
- Tato lambda nemá žádné parametry a vrací řetězec jako výraz.
- Tato lambda nemá žádné parametry a vrací řetězec (pomocí explicitního příkazu return v rámci bloku).
- 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; }.
- 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; }.