logo

Lambda-uttrykk i Java

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 uttrykkLambda-uttrykkssyntaks

 lambda operator ->body>

Lambdauttrykksparametre

Det er tre lambda-uttrykksparametre som er nevnt nedenfor:

  1. Null parameter
  2. Enkelt parameter
  3. 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?

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

Svar:

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

  1. Denne lambdaen har ingen parametere og returnerer ugyldig. Det ligner på en metode med en tom kropp: public void run() { }.
  2. Denne lambdaen har ingen parametere og returnerer en streng som et uttrykk.
  3. Denne lambdaen har ingen parametere og returnerer en streng (ved hjelp av en eksplisitt retursetning, innenfor en blokk).
  4. retur er en kontrollflyterklæring. For å gjøre denne lambdaen gyldig, kreves det krøllete tannregulering som følger: (heltall i) -> { return geeksforgeeks + i; }.
  5. 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; }.