Javalla Lambda-lausekkeet ilmaisevat periaatteessa toiminnallisten rajapintojen esiintymiä (yhden abstraktin menetelmän käyttöliittymää kutsutaan toiminnalliseksi rajapinnaksi). Lambda-lausekkeet Javassa ovat samat kuin lambda-funktiot, jotka ovat lyhyt koodilohko, joka hyväksyy syötteen parametreiksi ja palauttaa tuloksena olevan arvon. Lambda-lausekkeet on hiljattain sisällytetty Java SE 8:aan.
Lambda Expressionin toiminnot Javassa
Lambda-lausekkeet toteuttavat ainoan abstraktin funktion ja siten toteuttavat toiminnallisia rajapintoja. Lambdalausekkeet on lisätty Java 8:aan ja tarjoavat alla olevat toiminnot.
- Ota käyttöön käsitelläksesi toiminnallisuutta menetelmäargumenttina tai koodia datana.
- Funktio, joka voidaan luoda kuulumatta mihinkään luokkaan.
- Lambda-lauseke voidaan välittää ikään kuin se olisi objekti ja suorittaa pyynnöstä.
Esimerkki Java Lambda -lausekkeesta
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); // Tämä kutsuu edellä olevan lambda-lausekkeen ja tulostaa 10. fobj.abstractFun(5); } }>
Lähtö
10>
Lambda-lausekkeen syntaksi
lambda operator ->body>
Lambda-lausekeparametrit
Alla on mainittu kolme Lambda-lausekeparametria:
- Nolla parametri
- Yksi parametri
- Useita parametreja
1. Lambda-lauseke nollaparametrilla
() ->System.out.println('Nollaparametri lambda');>>2. Lambda-lauseke yhdellä parametrilla
> Sulkujen käyttö ei ole pakollista, jos muuttujan tyyppi voidaan päätellä kontekstista
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} ArrayListarrL = uusi ArrayList (); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4); // Lambda-lausekkeen käyttäminen kaikkien elementtien tulostamiseen // arrL:stä arrL.forEach(n -> System.out.println(n)); // Lambda-lausekkeen käyttäminen parillisten elementtien tulostamiseen // of arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } }>
LähtöHuomautus: että lambda-lausekkeita voidaan käyttää vain toiminnallisten rajapintojen toteuttamiseen. Myös yllä olevassa esimerkissä lambda-lauseke toteutuu Kuluttaja Toiminnallinen käyttöliittymä.
3. Lambda-lauseke useilla parametreilla
(p1, p2) ->System.out.println('Useita parametreja: ' + p1 + ', ' + p2);>>Java-ohjelma, joka havainnollistaa lambda-lausekkeen toimintaa kahdella argumentilla.
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; // lambda-lausekkeen kertolasku kahdelle // parametrille Tämä lauseke toteuttaa myös // 'FuncInter1'-liitännän FuncInter1 multiply = (int x, int y) -> x * y; // Testin objektin luominen kutsua varten toimii käyttäen // erilaisia toteutuksia käyttäen lambdaa // Lausekkeet Testi tobj = new Test(); // Lisää kaksi numeroa lambda-lausekkeella System.out.println('Lisäys on ' + tobj.operate(6, 3, add)); // Kerro kaksi numeroa lambda-lausekkeella System.out.println('Kerto on ' + tobj.operate(6, 3, kerro)); // lambda-lauseke yksittäiselle parametrille // Tämä lauseke toteuttaa 'FuncInter2'-rajapinnan FuncInter2 fobj = viesti -> System.out.println('Hei ' + viesti); fobj.sayMessage('Geek'); } }>
LähtöHuomautus: Lambdalausekkeet ovat aivan kuten funktioita ja ne hyväksyvät parametrit aivan kuten funktiot. Johtopäätös
Joitakin tärkeitä kohtia tästä artikkelista mainitaan alla:
- Lambda-lausekkeen runko voi sisältää nollan, yhden tai useamman lauseen.
- Kun on yksi lause, kiharat hakasulkeet eivät ole pakollisia ja anonyymin funktion palautustyyppi on sama kuin runkolausekkeen palautustyyppi.
- Kun käskyjä on useampi kuin yksi, ne on suljettava kaareviin hakasulkeisiin (koodilohko) ja anonyymin funktion palautustyyppi on sama kuin koodilohkon sisällä palautetun arvon tyyppi, tai void, jos mitään ei palauteta .
Lambda Expressionin usein kysytyt kysymykset
Q1. Minkä tyyppinen lambda-lauseke Java?
Vastaus:
Java Lambda -lausekkeet ovat lyhyt koodilohko, joka hyväksyy syötteen parametreina ja palauttaa tuloksena olevan arvon.
Q2. Onko hyvä käyttää lambda-lausekkeita Javassa?
Vastaus:
Kyllä, lambda-lausekkeiden käyttö helpottaa muiden sovellusliittymien käyttöä ja tukemista.
Q3. Mitkä ovat Java lambdan haitat?
Vastaus:
Java lambda -funktioita voidaan käyttää vain toiminnallisten liitäntöjen kanssa.
Q4. Mikä seuraavista on/EI ole kelvollisia lambda-lausekkeita juuri esitettyjen syntaksisääntöjen perusteella?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Kokonaisluku i) -> return geeksforgeeks + i;
- (merkkijono s) -> {geeksforgeeks;}
Vastaus:
4 ja 5 ovat virheellisiä lambda, loput ovat kelvollisia. Yksityiskohdat:
- Tällä lambdalla ei ole parametreja ja se palauttaa mitättömiä. Se on samanlainen kuin menetelmä, jossa on tyhjä runko: public void run() { }.
- Tällä lambdalla ei ole parametreja ja se palauttaa lausekkeena merkkijonon.
- Tällä lambdalla ei ole parametreja ja se palauttaa merkkijonon (käyttäen eksplisiittistä return-lausetta lohkon sisällä).
- return on ohjausvirtalauseke. Jotta tämä lambda olisi kelvollinen, tarvitaan kiharat aaltosulkeet seuraavasti: (Kokonaisluku i) -> { return geeksforgeeks + i; }.
- geeks for geeks on ilmaus, ei lausunto. Jotta tämä lambda olisi kelvollinen, voit poistaa kiharat aaltosulkeet ja puolipisteen seuraavasti: (merkkijono s) -> geeks for geeks. Tai jos haluat, voit käyttää eksplisiittistä return-lausetta seuraavasti: (String s) -> { return geeks for geeks; }.