V Javi izrazi Lambda v bistvu izražajo primerke funkcionalnih vmesnikov (vmesnik z eno samo abstraktno metodo se imenuje funkcionalni vmesnik). Lambda izrazi v Javi so enaki funkcijam lambda, ki so kratek blok kode, ki sprejme vnos kot parametre in vrne posledično vrednost. Lambda izrazi so nedavno vključeni v Java SE 8.
Funkcionalnosti lambda izraza v Javi
Lambda izrazi izvajajo edino abstraktno funkcijo in zato izvajajo funkcionalne vmesnike Lambda izrazi so dodani v Javi 8 in zagotavljajo spodnje funkcije.
- Omogočite, da funkcionalnost obravnavate kot argument metode ali kodo kot podatke.
- Funkcija, ki jo je mogoče ustvariti, ne da bi pripadala kateremu koli razredu.
- Lambda izraz se lahko posreduje, kot da bi bil objekt, in se izvede na zahtevo.
Primer Java Lambda izraza
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); // To pokliče zgornji lambda izraz in natisne 10. fobj.abstractFun(5); } }>
Izhod
10>
Sintaksa lambda izraza
lambda operator ->telo>
Parametri lambda izraza
Spodaj so omenjeni trije parametri lambda izraza:
- Ničelni parameter
- En parameter
- Več parametrov
1. Lambda izraz z ničelnim parametrom
() ->System.out.println('Lambda parametra nič');>
2. Lambda izraz z enim parametrom
(p) ->System.out.println('En parameter: ' + p);>
Uporaba oklepajev ni obvezna, če je vrsto te spremenljivke mogoče sklepati iz konteksta
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); // Uporaba lambda izraza za tiskanje vseh elementov // arrL arrL.forEach(n -> System.out.println(n)); // Uporaba lambda izraza za tiskanje sodih elementov // arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } }>
Izhod
1 2 3 4 2 4>
Opomba: da se lambda izrazi lahko uporabljajo samo za implementacijo funkcionalnih vmesnikov. Tudi v zgornjem primeru se izvaja lambda izraz Potrošnik Funkcionalni vmesnik.
3. Lambda izraz z več parametri
(p1, p2) ->System.out.println('Več parametrov: ' + p1 + ', ' + p2);>
Program Java za prikaz delovanja lambda izraza z dvema argumentoma.
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; // množenje lambda izraza za dva // parametra Ta izraz implementira tudi // 'FuncInter1' vmesnik FuncInter1 multiply = (int x, int y) -> x * y; // Ustvarjanje predmeta Test za klic operirati z uporabo // različnih implementacij z uporabo lambda // Izrazi Test tobj = new Test(); // Seštej dve števili z uporabo lambda izraza System.out.println('Seštevanje je ' + tobj.operate(6, 3, add)); // Množenje dveh števil z uporabo lambda izraza System.out.println('Množenje je ' + tobj.operate(6, 3, multiply)); // lambda izraz za en parameter // Ta izraz implementira vmesnik 'FuncInter2' FuncInter2 fobj = message -> System.out.println('Hello ' + message); fobj.sayMessage('Geek'); } }>
Izhod
Addition is 9 Multiplication is 18 Hello Geek>
Opomba: Lambda izrazi so kot funkcije in sprejemajo parametre tako kot funkcije.
Zaključek
Spodaj je navedenih nekaj pomembnih točk iz tega članka:
- Telo lambda izraza lahko vsebuje nič, enega ali več stavkov.
- Če obstaja en sam stavek, zavit oklepaj ni obvezen in tip vrnitve anonimne funkcije je enak tipu izraza telesa.
- Če obstaja več kot en stavek, morajo biti le-ti zaprti v zavite oklepaje (blok kode), vrnjena vrsta anonimne funkcije pa je enaka vrsti vrednosti, vrnjene znotraj bloka kode, ali nična, če ni vrnjena nič .
Pogosta vprašanja o lambda izrazu
Q1. Kakšna vrsta lambda izraza Java?
odgovor:
Lambda izrazi Java so kratek blok kode, ki sprejme vnos kot parametre in vrne posledično vrednost.
Q2. Ali je dobro uporabljati lambda izraze v Javi?
odgovor:
Da, uporaba lambda izrazov olajša uporabo in podporo drugim API-jem.
Q3. Kakšne so slabosti Java lambda?
odgovor:
Java lambda funkcije je mogoče uporabljati samo s funkcionalnimi vmesniki.
Q4. Glede na pravkar prikazana sintaksna pravila, kateri od naslednjih NI veljaven lambda izraz?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Celo število i) -> vrni geeksforgeeks + i;
- (Niz s) -> {geeksforgeeks;}
odgovor:
4 in 5 sta neveljavni lambdi, ostali so veljavni. podrobnosti:
- Ta lambda nima parametrov in vrne void. Podobna je metodi s praznim telesom: public void run() { }.
- Ta lambda nima parametrov in vrne niz kot izraz.
- Ta lambda nima parametrov in vrne niz (z uporabo eksplicitnega stavka vrnitve znotraj bloka).
- return je stavek nadzornega toka. Da bo ta lambda veljavna, so potrebni zaviti oklepaji, kot sledi: (Integer i) -> { return geeksforgeeks + i; }.
- geeks za geeke je izraz, ne izjava. Da bo ta lambda veljavna, lahko odstranite zavite oklepaje in podpičje na naslednji način: (Niz s) -> geeks za geeks. Ali pa, če želite, lahko uporabite eksplicitni stavek return, kot sledi: (Niz s) -> { return geeks for geeks; }.