logo

Lambda izraz v Javi

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>

lambda izrazSintaksa lambda izraza

 lambda operator ->telo>

Parametri lambda izraza

Spodaj so omenjeni trije parametri lambda izraza:

  1. Ničelni parameter
  2. En parameter
  3. 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?

  1. () -> {}
  2. () -> geeksforgeeks
  3. () -> { return geeksforgeeks;}
  4. (Celo število i) -> vrni geeksforgeeks + i;
  5. (Niz s) -> {geeksforgeeks;}

odgovor:

4 in 5 sta neveljavni lambdi, ostali so veljavni. podrobnosti:

  1. Ta lambda nima parametrov in vrne void. Podobna je metodi s praznim telesom: public void run() { }.
  2. Ta lambda nima parametrov in vrne niz kot izraz.
  3. Ta lambda nima parametrov in vrne niz (z uporabo eksplicitnega stavka vrnitve znotraj bloka).
  4. return je stavek nadzornega toka. Da bo ta lambda veljavna, so potrebni zaviti oklepaji, kot sledi: (Integer i) -> { return geeksforgeeks + i; }.
  5. 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; }.