logo

Expresii Java Lambda

Expresia Lambda este o caracteristică nouă și importantă a Java care a fost inclusă în Java SE 8. Oferă o modalitate clară și concisă de a reprezenta o interfață a unei metode folosind o expresie. Este foarte util în biblioteca de colecții. Ajută la repetarea, filtrarea și extragerea datelor din colecție.

Expresia Lambda este folosită pentru a furniza implementarea unei interfețe care are o interfață funcțională. Salvează mult cod. În cazul expresiei lambda, nu este nevoie să definim din nou metoda pentru furnizarea implementării. Aici, scriem doar codul de implementare.

Expresia lambda Java este tratată ca o funcție, astfel încât compilatorul nu creează fișierul .class.

Interfață funcțională

Expresia Lambda oferă implementarea interfata functionala . O interfață care are o singură metodă abstractă se numește interfață funcțională. Java oferă o notare @ Interfață funcțională , care este folosit pentru a declara o interfață ca interfață funcțională.


De ce să folosiți Lambda Expression

  1. Pentru a oferi implementarea interfeței funcționale.
  2. Mai puțină codare.

Sintaxa expresiei Java Lambda

 (argument-list) -> {body} 

Expresia lambda Java este formată din trei componente.

1) Lista de argumente: Poate fi, de asemenea, gol sau negol.

fișiere Linux

2) Jeton săgeată: Este folosit pentru a lega lista de argumente și corpul de expresie.

3) Corp: Conține expresii și instrucțiuni pentru expresia lambda.

Sintaxă fără parametri

 () -> { //Body of no parameter lambda } 

Sintaxa unui parametru

 (p1) -> { //Body of single parameter lambda } 

Sintaxa cu doi parametri

testarea software-ului
 (p1,p2) -> { //Body of multiple parameter lambda } 

Să vedem un scenariu în care nu implementăm expresia lambda Java. Aici, implementăm o interfață fără a folosi expresia lambda.

Fără expresie Lambda

 interface Drawable{ public void draw(); } public class LambdaExpressionExample { public static void main(String[] args) { int width=10; //without lambda, Drawable implementation using anonymous class Drawable d=new Drawable(){ public void draw(){System.out.println('Drawing '+width);} }; d.draw(); } } 
Testează-l acum

Ieșire:

 Drawing 10 

Exemplu de expresie Java Lambda

Acum, vom implementa exemplul de mai sus cu ajutorul expresiei lambda Java.

 @FunctionalInterface //It is optional interface Drawable{ public void draw(); } public class LambdaExpressionExample2 { public static void main(String[] args) { int width=10; //with lambda Drawable d2=()->{ System.out.println('Drawing '+width); }; d2.draw(); } } 
Testează-l acum

Ieșire:

 Drawing 10 

O expresie lambda poate avea zero sau orice număr de argumente. Să vedem exemplele:

Exemplu de expresie Java Lambda: Niciun parametru

 interface Sayable{ public String say(); } public class LambdaExpressionExample3{ public static void main(String[] args) { Sayable s=()->{ return 'I have nothing to say.'; }; System.out.println(s.say()); } } 
Testează-l acum

Ieșire:

 I have nothing to say. 

Exemplu de expresie Java Lambda: un singur parametru

 interface Sayable{ public String say(String name); } public class LambdaExpressionExample4{ public static void main(String[] args) { // Lambda expression with single parameter. Sayable s1=(name)->{ return 'Hello, '+name; }; System.out.println(s1.say('Sonoo')); // You can omit function parentheses Sayable s2= name ->{ return 'Hello, '+name; }; System.out.println(s2.say('Sonoo')); } } 
Testează-l acum

Ieșire:

 Hello, Sonoo Hello, Sonoo 

Exemplu de expresie Java Lambda: parametri multipli

 interface Addable{ int add(int a,int b); } public class LambdaExpressionExample5{ public static void main(String[] args) { // Multiple parameters in lambda expression Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Multiple parameters with data type in lambda expression Addable ad2=(int a,int b)->(a+b); System.out.println(ad2.add(100,200)); } } 
Testează-l acum

Ieșire:

 30 300 

Exemplu de expresie Java Lambda: cu sau fără cuvânt cheie return

În expresia lambda Java, dacă există o singură instrucțiune, puteți sau nu utiliza cuvântul cheie return. Trebuie să utilizați cuvântul cheie return atunci când expresia lambda conține mai multe instrucțiuni.

recursiunea în java
 interface Addable{ int add(int a,int b); } public class LambdaExpressionExample6 { public static void main(String[] args) { // Lambda expression without return keyword. Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Lambda expression with return keyword. Addable ad2=(int a,int b)->{ return (a+b); }; System.out.println(ad2.add(100,200)); } } 
Testează-l acum

Ieșire:

 30 300 

Exemplu de expresie Java Lambda: bucla Foreach

 import java.util.*; public class LambdaExpressionExample7{ public static void main(String[] args) { List list=new ArrayList(); list.add('ankit'); list.add('mayank'); list.add('irfan'); list.add('jai'); list.forEach( (n)->System.out.println(n) ); } } 
Testează-l acum

Ieșire:

 ankit mayank irfan jai 

Exemplu de expresie Java Lambda: instrucțiuni multiple

 @FunctionalInterface interface Sayable{ String say(String message); } public class LambdaExpressionExample8{ public static void main(String[] args) { // You can pass multiple statements in lambda expression Sayable person = (message)-> { String str1 = 'I would like to say, '; String str2 = str1 + message; return str2; }; System.out.println(person.say('time is precious.')); } } 
Testează-l acum

Ieșire:

 I would like to say, time is precious. 

Exemplu de expresie Java Lambda: crearea unui fir

Puteți folosi expresia lambda pentru a rula firul. În exemplul următor, implementăm metoda run utilizând expresia lambda.

 public class LambdaExpressionExample9{ public static void main(String[] args) { //Thread Example without lambda Runnable r1=new Runnable(){ public void run(){ System.out.println('Thread1 is running...'); } }; Thread t1=new Thread(r1); t1.start(); //Thread Example with lambda Runnable r2=()->{ System.out.println('Thread2 is running...'); }; Thread t2=new Thread(r2); t2.start(); } } 
Testează-l acum

Ieșire:

 Thread1 is running... Thread2 is running... 

Expresia lambda Java poate fi utilizată în cadrul de colectare. Oferă o modalitate eficientă și concisă de a repeta, filtra și prelua date. În continuare sunt oferite câteva exemple lambda și de colecție.

Exemplu de expresie Java Lambda: Comparator

 import java.util.ArrayList; import java.util.Collections; import java.util.List; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample10{ public static void main(String[] args) { List list=new ArrayList(); //Adding Products list.add(new Product(1,'HP Laptop',25000f)); list.add(new Product(3,'Keyboard',300f)); list.add(new Product(2,'Dell Mouse',150f)); System.out.println('Sorting on the basis of name...'); // implementing lambda expression Collections.sort(list,(p1,p2)->{ return p1.name.compareTo(p2.name); }); for(Product p:list){ System.out.println(p.id+' '+p.name+' '+p.price); } } } 
Testează-l acum

Ieșire:

nu
 Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0 

Exemplu de expresie Java Lambda: Filtrați datele de colectare

 import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample11{ public static void main(String[] args) { List list=new ArrayList(); list.add(new Product(1,'Samsung A5',17000f)); list.add(new Product(3,'Iphone 6S',65000f)); list.add(new Product(2,'Sony Xperia',25000f)); list.add(new Product(4,'Nokia Lumia',15000f)); list.add(new Product(5,'Redmi4 ',26000f)); list.add(new Product(6,'Lenevo Vibe',19000f)); // using lambda to filter data Stream filtered_data = list.stream().filter(p -> p.price > 20000); // using lambda to iterate through collection filtered_data.forEach( product -> System.out.println(product.name+': '+product.price) ); } } 
Testează-l acum

Ieșire:

 Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0 

Exemplu de expresie Java Lambda: Ascultător de evenimente

 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class LambdaEventListenerExample { public static void main(String[] args) { JTextField tf=new JTextField(); tf.setBounds(50, 50,150,20); JButton b=new JButton('click'); b.setBounds(80,100,70,30); // lambda expression implementing here. b.addActionListener(e-> {tf.setText('hello swing');}); JFrame f=new JFrame(); f.add(tf);f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(null); f.setSize(300, 200); f.setVisible(true); } } 

Ieșire:

Exemplu de gestionare a evenimentelor Java Lambda