logo

Expresiones Lambda de Java

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

  1. Proporcionar la implementación de la interfaz funcional.
  2. 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:

Ejemplo de manejo de eventos Java Lambda