logo

Lambda-udtryk i Java

I Java udtrykker Lambda-udtryk grundlæggende forekomster af funktionelle grænseflader (En grænseflade med en enkelt abstrakt metode kaldes en funktionel grænseflade). Lambda-udtryk i Java er det samme som lambda-funktioner, som er den korte kodeblok, der accepterer input som parametre og returnerer en resulterende værdi. Lambda-udtryk er for nylig inkluderet i Java SE 8.

Funktioner af Lambda Expression i Java

Lambda Expressions implementerer den eneste abstrakte funktion og implementerer derfor funktionelle grænseflader lambda-udtryk tilføjes i Java 8 og giver nedenstående funktionaliteter.



  • Aktiver for at behandle funktionalitet som et metodeargument eller kode som data.
  • En funktion, der kan oprettes uden at tilhøre nogen klasse.
  • Et lambda-udtryk kan sendes rundt, som om det var en genstand og udføres efter behov.

Eksempel på Java Lambda-udtryk

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 kalder ovenstående lambda-udtryk og udskriver 10. fobj.abstractFun(5);  } }>

Produktion
10>

lambda udtrykLambda-udtrykssyntaks

 lambda operator ->krop>

Lambda-udtryksparametre

Der er tre lambdaudtryksparametre, der er nævnt nedenfor:

  1. Nul parameter
  2. Enkelt parameter
  3. Flere parametre

1. Lambda-udtryk med nul-parameter

() ->System.out.println('Nul parameter lambda');>

2. Lambda-udtryk med enkelt parameter

(p) ->System.out.println('En parameter: ' + p);>

Det er ikke obligatorisk at bruge parenteser, hvis typen af ​​den pågældende variabel kan udledes af 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);  // Brug af lambda-udtryk til at udskrive alle elementer // af arrL arrL.forEach(n -> System.out.println(n));  // Brug af lambda-udtryk til at udskrive lige elementer // af arrL arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); });  } }>

Produktion
1 2 3 4 2 4>

Bemærk: at lambda-udtryk kun kan bruges til at implementere funktionelle grænseflader. I ovenstående eksempel implementerer lambda-udtrykket også Forbruger Funktionel grænseflade.



3. Lambda-udtryk med flere parametre

(p1, p2) ->System.out.println('Flere parametre: ' + p1 + ', ' + p2);>

Et Java-program til at demonstrere virkemåden af ​​et lambda-udtryk 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 udtryk multiplikation for to // parametre Dette udtryk implementerer også // 'FuncInter1' interface FuncInter1 multiplicere = (int x, int y) -> x * y;  // Oprettelse af et objekt af Test til at kalde operere ved hjælp af // forskellige implementeringer ved hjælp af lambda // Expressions Test tobj = new Test();  // Tilføj to tal ved hjælp af lambda-udtryk System.out.println('Addition er ' + tobj.operate(6, 3, add));  // Multiplicer to tal ved hjælp af lambda-udtryk System.out.println('Multiplikation er ' + tobj.operate(6, 3, multiplicer));  // lambda udtryk for enkelt parameter // Dette udtryk implementerer 'FuncInter2' interface FuncInter2 fobj = besked -> System.out.println('Hej ' + besked);  fobj.sayMessage('Nørd');  } }>

Produktion
Addition is 9 Multiplication is 18 Hello Geek>

Bemærk: Lambda-udtryk er ligesom funktioner, og de accepterer parametre ligesom funktioner.

Konklusion

Nogle vigtige pointindtag fra denne artikel er nævnt nedenfor:



  • Brødteksten i et lambda-udtryk kan indeholde nul, én eller flere udsagn.
  • Når der er et enkelt udsagn, er krøllede parenteser ikke obligatoriske, og returtypen for den anonyme funktion er den samme som for kropsudtrykket.
  • Når der er mere end én sætning, skal disse være omgivet af krøllede parenteser (en kodeblok), og returneringstypen for den anonyme funktion er den samme som typen af ​​værdien, der returneres inden for kodeblokken, eller annulleres, hvis intet returneres .

Ofte stillede spørgsmål i Lambda Expression

Q1. Hvilken type lambda-udtryk Java?

Svar:

Java Lambda Expressions er den korte kodeblok, der accepterer input som parametre og returnerer en resulterende værdi.

Q2. Er det godt at bruge lambda-udtryk i Java?

Svar:

Ja, at bruge lambda-udtryk gør det nemmere at bruge og understøtte andre API'er.

Q3. Hvad er ulemperne ved Java lambda?

Svar:

Java lambda-funktioner kan kun bruges med funktionelle grænseflader.

Q4. Baseret på de netop viste syntaksregler, hvilke af følgende er/er IKKE gyldige lambda-udtryk?

  1. () -> {}
  2. () -> geeksforgeeks
  3. () -> { returner geeksforgeeks;}
  4. (Heltal i) -> returner geeksforgeeks + i;
  5. (String s) -> {geeksforgeeks;}

Svar:

4 og 5 er ugyldige lambdaer, resten er gyldige. Detaljer:

  1. Denne lambda har ingen parametre og returnerer ugyldig. Det ligner en metode med en tom krop: public void run() { }.
  2. Denne lambda har ingen parametre og returnerer en streng som et udtryk.
  3. Denne lambda har ingen parametre og returnerer en streng (ved hjælp af en eksplicit retursætning inden for en blok).
  4. retur er en kontrol-flow-erklæring. For at gøre denne lambda gyldig kræves der krøllede seler som følger: (heltal i) -> { return geeksforgeeks + i; }.
  5. nørder for nørder er et udtryk, ikke et udsagn. For at gøre denne lambda gyldig kan du fjerne de krøllede seler og semikolon som følger: (String s) -> geeks for geeks. Eller hvis du foretrækker det, kan du bruge en eksplicit returerklæring som følger: (String s) -> { return geeks for geeks; }.