logo

Expressions Lambda de Java

L'expressió lambda és una característica nova i important de Java que es va incloure a Java SE 8. Proporciona una manera clara i concisa de representar una interfície de mètode mitjançant una expressió. És molt útil a la biblioteca de col·leccions. Ajuda a iterar, filtrar i extreure dades de la recollida.

L'expressió Lambda s'utilitza per proporcionar la implementació d'una interfície que té una interfície funcional. Estalvia molt de codi. En cas d'expressió lambda, no cal que tornem a definir el mètode per proporcionar la implementació. Aquí, només escrivim el codi d'implementació.

L'expressió lambda de Java es tracta com una funció, de manera que el compilador no crea un fitxer .class.

Interfície funcional

L'expressió lambda proporciona la implementació de interfície funcional . Una interfície que només té un mètode abstracte s'anomena interfície funcional. Java proporciona una anotació @ Interfície funcional , que s'utilitza per declarar una interfície com a interfície funcional.


Per què utilitzar l'expressió Lambda

  1. Proporcionar la implementació de la interfície funcional.
  2. Menys codificació.

Sintaxi d'expressió Lambda de Java

 (argument-list) -> {body} 

L'expressió lambda de Java consta de tres components.

1) Llista d'arguments: També pot ser buit o no buit.

2) Fitxa de fletxa: S'utilitza per enllaçar la llista d'arguments i el cos de l'expressió.

3) Cos: Conté expressions i declaracions per a l'expressió lambda.

pes kat timpf

Sintaxi sense paràmetres

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

Sintaxi d'un paràmetre

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

Sintaxi de dos paràmetres

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

Vegem un escenari en què no estem implementant l'expressió lambda de Java. Aquí, estem implementant una interfície sense utilitzar l'expressió lambda.

Sense expressió 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(); } } 
Prova-ho ara

Sortida:

 Drawing 10 

Exemple d'expressió Lambda de Java

Ara, implementarem l'exemple anterior amb l'ajuda de l'expressió lambda de 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(); } } 
Prova-ho ara

Sortida:

 Drawing 10 

Una expressió lambda pot tenir zero o qualsevol nombre d'arguments. Vegem els exemples:

Exemple d'expressió Lambda de Java: cap paràmetre

 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()); } } 
Prova-ho ara

Sortida:

 I have nothing to say. 

Exemple d'expressió Lambda de Java: paràmetre únic

 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')); } } 
Prova-ho ara

Sortida:

 Hello, Sonoo Hello, Sonoo 

Exemple d'expressió Lambda de Java: paràmetres múltiples

 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)); } } 
Prova-ho ara

Sortida:

 30 300 

Exemple d'expressió Lambda de Java: amb o sense paraula clau de retorn

A l'expressió lambda de Java, si només hi ha una instrucció, podeu utilitzar o no la paraula clau return. Heu d'utilitzar la paraula clau return quan l'expressió lambda conté diverses declaracions.

 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)); } } 
Prova-ho ara

Sortida:

 30 300 

Exemple d'expressió Lambda de Java: bucle 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) ); } } 
Prova-ho ara

Sortida:

 ankit mayank irfan jai 

Exemple d'expressió Lambda de Java: declaracions múltiples

 @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.')); } } 
Prova-ho ara

Sortida:

 I would like to say, time is precious. 

Exemple d'expressió Lambda de Java: creació d'un fil

Podeu utilitzar l'expressió lambda per executar el fil. A l'exemple següent, estem implementant el mètode d'execució mitjançant l'expressió 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(); } } 
Prova-ho ara

Sortida:

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

L'expressió lambda de Java es pot utilitzar al marc de col·lecció. Proporciona una manera eficient i concisa d'iterar, filtrar i obtenir dades. A continuació es proporcionen alguns exemples de lambda i de col·lecció.

com trobar la mida del monitor

Exemple d'expressió Lambda de Java: comparador

 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); } } } 
Prova-ho ara

Sortida:

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

Exemple d'expressió Lambda de Java: dades de recollida de filtres

 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) ); } } 
Prova-ho ara

Sortida:

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

Exemple d'expressió Lambda de Java: Oient d'esdeveniments

 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); } } 

Sortida:

Exemple de gestió d'esdeveniments de Java Lambda