I Java uttrykker Lambda-uttrykk i utgangspunktet forekomster av funksjonelle grensesnitt (Et grensesnitt med en enkelt abstrakt metode kalles et funksjonelt grensesnitt). Lambda-uttrykk i Java er det samme som lambda-funksjoner som er den korte kodeblokken som aksepterer input som parametere og returnerer en resulterende verdi. Lambda-uttrykk er nylig inkludert i Java SE 8.
Funksjoner av Lambda Expression i Java
Lambda-uttrykk implementerer den eneste abstrakte funksjonen og implementerer derfor funksjonelle grensesnitt lambda-uttrykk legges til i Java 8 og gir funksjonene nedenfor.
- Aktiver for å behandle funksjonalitet som et metodeargument, eller kode som data.
- En funksjon som kan opprettes uten å tilhøre noen klasse.
- Et lambda-uttrykk kan sendes rundt som om det var et objekt og utføres på forespørsel.
Eksempel på Java Lambda-uttrykk
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); // Dette kaller ovenfor lambda-uttrykk og skriver ut 10. fobj.abstractFun(5); } }> Produksjon
10>
Lambda-uttrykkssyntaks
lambda operator ->body>
Lambdauttrykksparametre
Det er tre lambda-uttrykksparametre som er nevnt nedenfor:
- Null parameter
- Enkelt parameter
- Flere parametere
1. Lambdauttrykk med null parameter
() ->System.out.println('Null parameter lambda');>2. Lambdauttrykk med enkelt parameter
(p) ->System.out.println('En parameter: ' + p);>Det er ikke obligatorisk å bruke parenteser hvis typen av variabelen kan utledes fra konteksten
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 = ny ArrayList (); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4); // Bruke lambda-uttrykk for å skrive ut alle elementene // av arrL arrL.forEach(n -> System.out.println(n)); // Bruke lambda-uttrykk for å skrive ut jevne elementer // av arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); }); } }> Produksjon
1 2 3 4 2 4>
Merk: at lambda-uttrykk kun kan brukes til å implementere funksjonelle grensesnitt. I eksemplet ovenfor implementeres også lambda-uttrykket Forbruker Funksjonelt grensesnitt.
3. Lambdauttrykk med flere parametere
(p1, p2) ->System.out.println('Flere parametere: ' + p1 + ', ' + p2);>Et Java-program for å demonstrere virkemåten til et lambda-uttrykk med to argumenter.
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 uttrykk multiplikasjon for to // parametere Dette uttrykket implementerer også // 'FuncInter1' grensesnitt FuncInter1 multiply = (int x, int y) -> x * y; // Opprette et objekt av Test for å kalle operere ved å bruke // forskjellige implementeringer ved hjelp av lambda // Expressions Test tobj = new Test(); // Legg til to tall ved å bruke lambda-uttrykket System.out.println('Addition is ' + tobj.operate(6, 3, add)); // Multipliser to tall ved å bruke lambda-uttrykket System.out.println('Multiplikasjon er ' + tobj.operate(6, 3, multipliser)); // lambda uttrykk for enkelt parameter // Dette uttrykket implementerer 'FuncInter2' grensesnitt FuncInter2 fobj = melding -> System.out.println('Hei ' + melding); fobj.sayMessage('Geek'); } }> Produksjon
Addition is 9 Multiplication is 18 Hello Geek>
Merk: Lambda-uttrykk er akkurat som funksjoner og de aksepterer parametere akkurat som funksjoner.
Konklusjon
Noen viktige poeng fra denne artikkelen er nevnt nedenfor:
- Brødteksten i et lambda-uttrykk kan inneholde null, én eller flere utsagn.
- Når det er et enkelt utsagn, er krølleparenteser ikke obligatoriske, og returtypen til den anonyme funksjonen er den samme som for kroppsuttrykket.
- Når det er mer enn én setning, må disse være omsluttet av krøllede parenteser (en kodeblokk) og returtypen til den anonyme funksjonen er den samme som verdien som returneres i kodeblokken, eller ugyldig hvis ingenting returneres .
Vanlige spørsmål i Lambda Expression
Q1. Hvilken type lambda-uttrykk Java?
Svar:
Java Lambda Expressions er den korte kodeblokken som aksepterer input som parametere og returnerer en resulterende verdi.
Q2. Er det bra å bruke lambda-uttrykk i Java?
Svar:
Ja, bruk av lambda-uttrykk gjør det enklere å bruke og støtte andre APIer.
Q3. Hva er ulempene med Java lambda?
Svar:
Java lambda-funksjoner kan bare brukes med funksjonelle grensesnitt.
Q4. Basert på syntaksreglene som nettopp er vist, hvilke av følgende er/er IKKE gyldige lambda-uttrykk?
- () -> {}
- () -> geeksforgeeks
- () -> { return geeksforgeeks;}
- (Heltall i) -> returner geeksforgeeks + i;
- (String s) -> {geeksforgeeks;}
Svar:
4 og 5 er ugyldige lambdaer, resten er gyldige. Detaljer:
- Denne lambdaen har ingen parametere og returnerer ugyldig. Det ligner på en metode med en tom kropp: public void run() { }.
- Denne lambdaen har ingen parametere og returnerer en streng som et uttrykk.
- Denne lambdaen har ingen parametere og returnerer en streng (ved hjelp av en eksplisitt retursetning, innenfor en blokk).
- retur er en kontrollflyterklæring. For å gjøre denne lambdaen gyldig, kreves det krøllete tannregulering som følger: (heltall i) -> { return geeksforgeeks + i; }.
- nerder for nerder er et uttrykk, ikke et utsagn. For å gjøre denne lambdaen gyldig, kan du fjerne krøllete seler og semikolon som følger: (String s) -> geeks for nerder. Eller hvis du foretrekker det, kan du bruke en eksplisitt returerklæring som følger: (String s) -> { return geeks for geeks; }.
