La expresión Lambda es una característica nueva e importante de Java que se incluyó en Java SE 8. Proporciona una forma clara y concisa de representar la interfaz de un método mediante una expresión. Es muy útil en la biblioteca de colecciones. Ayuda a iterar, filtrar y extraer datos de la colección.
La expresión Lambda se utiliza para proporcionar la implementación de una interfaz que tiene una interfaz funcional. Ahorra mucho código. En el caso de una expresión lambda, no es necesario volver a definir el método para proporcionar la implementación. Aquí, simplemente escribimos el código de implementación.
La expresión lambda de Java se trata como una función, por lo que el compilador no crea el archivo .class.
Interfaz funcional
La expresión lambda proporciona la implementación de interfaz funcional . Una interfaz que tiene un solo método abstracto se llama interfaz funcional. Java proporciona una anotación @ Interfaz funcional , que se utiliza para declarar una interfaz como interfaz funcional.
Por qué utilizar la expresión Lambda
- Proporcionar la implementación de la interfaz funcional.
- Menos codificación.
Sintaxis de expresión Java Lambda
(argument-list) -> {body}
La expresión lambda de Java consta de tres componentes.
1) Lista de argumentos: También puede estar vacío o no vacío.
2) Ficha de flecha: Se utiliza para vincular la lista de argumentos y el cuerpo de la expresión.
3) Cuerpo: Contiene expresiones y declaraciones para expresiones lambda.
1 millón en dígitos
Sin sintaxis de parámetros
() -> { //Body of no parameter lambda }
Sintaxis de un parámetro
(p1) -> { //Body of single parameter lambda }
Sintaxis de dos parámetros
(p1,p2) -> { //Body of multiple parameter lambda }
Veamos un escenario en el que no implementamos la expresión lambda de Java. Aquí, estamos implementando una interfaz sin utilizar expresión lambda.
Sin expresión 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(); } }Pruébalo ahora
Producción:
Drawing 10
Ejemplo de expresión Java Lambda
Ahora, implementaremos el ejemplo anterior con la ayuda de la expresión 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(); } }Pruébalo ahora
Producción:
Drawing 10
Una expresión lambda puede tener cero o cualquier número de argumentos. Veamos los ejemplos:
Ejemplo de expresión Java Lambda: sin parámetro
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()); } }Pruébalo ahora
Producción:
I have nothing to say.
Ejemplo de expresión Java Lambda: parámetro único
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')); } }Pruébalo ahora
Producción:
Hello, Sonoo Hello, Sonoo
Ejemplo de expresión Java Lambda: múltiples parámetros
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)); } }Pruébalo ahora
Producción:
ubuntu construir esencial
30 300
Ejemplo de expresión Java Lambda: con o sin palabra clave de retorno
En la expresión lambda de Java, si solo hay una declaración, puede usar o no la palabra clave return. Debe utilizar la palabra clave return cuando la expresión lambda contenga varias declaraciones.
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)); } }Pruébalo ahora
Producción:
30 300
Ejemplo de expresión Java Lambda: 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) ); } }Pruébalo ahora
Producción:
ankit mayank irfan jai
Ejemplo de expresión Java Lambda: declaraciones 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.')); } }Pruébalo ahora
Producción:
I would like to say, time is precious.
Ejemplo de expresión Java Lambda: creación de subprocesos
Puede utilizar la expresión lambda para ejecutar el hilo. En el siguiente ejemplo, implementamos el método de ejecución mediante el uso de una expresión 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(); } }Pruébalo ahora
Producción:
Thread1 is running... Thread2 is running...
La expresión lambda de Java se puede utilizar en el marco de la colección. Proporciona una forma eficiente y concisa de iterar, filtrar y recuperar datos. A continuación se proporcionan algunos ejemplos de lambda y colecciones.
Ejemplo de expresión Java Lambda: 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); } } }Pruébalo ahora
Producción:
Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0
Ejemplo de expresión Java Lambda: filtrar datos de recopilación
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) ); } }Pruébalo ahora
Producción:
Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0
Ejemplo de expresión Java Lambda: detector de eventos
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); } }
Producción: