La expresión lambda es una nueva característica introducida en Java 8. Una expresión lambda es una función anónima. Una función que no tiene nombre y no pertenece a ninguna clase. El concepto de expresión lambda se introdujo por primera vez en el lenguaje de programación LISP.

Sintaxis de la expresión Java Lambda

Para crear una expresión lambda, especificamos los parámetros de entrada (si los hay) en el lado izquierdo del operador lambda -> y colocamos el bloque de expresión o declaración en el lado derecho del operador lambda. Por ejemplo, la expresión lambda (x, y) -> x + y especifica que la expresión lambda toma dos argumentos xey y devuelve la suma de estos.

//Syntax of lambda expression
(parameter_list) -> {function_body}

Expresión lambda vs método en Java

Un método (o función) en Java tiene estas partes principales:
1. Nombre
2. Lista de parámetros
3. Cuerpo
4. tipo de retorno.

Una expresión lambda en Java tiene estas partes principales:
Expresión lambda solo tiene el cuerpo y la lista de parámetros.
1. No nombre: la función es anónima, por lo que no nos importa el nombre
2. Lista de parámetros
3. Cuerpo: esta es la parte principal de la función.
4. No tipo de retorno: el compilador de Java 8 puede deducir el tipo de retorno comprobando el código. no es necesario mencionarlo explícitamente.

Dónde usar Lambda en Java

Para utilizar la expresión lambda, debe crear su propia interfaz funcional o utilizar la interfaz funcional predeterminada proporcionada por Java. Una interfaz con método abstracto único único se llama interfaz funcional (o interfaz de método abstracto único), por ejemplo: Ejecutable, invocable, ActionListener, etc.

leer  Java 8: calcula los días entre dos fechas

Para utilizar la interfaz de funciones:

Pre Java 8: creamos clases internas anónimas.
Publicar Java 8: puede usar la expresión lambda en lugar de clases internas anónimas.

Ejemplo de expresión Java Lambda

Sin usar la expresión Lambda: Antes de Java 8, usábamos la clase interna anónima para implementar el único método de interfaz funcional abstracto.

import java.awt.*;  
import java.awt.event.*;  
public class ButtonListenerOldWay {  
    public static void main(String[] args) {  
       Frame frame=new Frame("ActionListener Before Java8");  
    
       Button b=new Button("Click Here");  
       b.setBounds(50,100,80,50);  
  
       b.addActionListener(new ActionListener(){  
          public void actionPerformed(ActionEvent e){  
    	     System.out.println("Hello World!"); 
          }  
       });  
       frame.add(b);
    
       frame.setSize(200,200);  
       frame.setLayout(null);  
       frame.setVisible(true);   
    }  
}

Usando la expresión Lambda: En lugar de crear una clase interna anónima, podemos crear una expresión lambda como esta:

import java.awt.*;  
public class ButtonListenerNewWay {  
   public static void main(String[] args) {  
      Frame frame=new Frame("ActionListener java8");  
     
      Button b=new Button("Click Here");  
      b.setBounds(50,100,80,50); 
  
      b.addActionListener(e -> System.out.println("Hello World!")); 
      frame.add(b);
  
      frame.setSize(200,200);  
      frame.setLayout(null);  
      frame.setVisible(true);   
   }  
}

Nota:

1. Como puede ver, hemos usado menos código con la expresión lambda.
2. Compatibilidad con versiones anteriores: puede utilizar la expresión lambda con el código antiguo. Lambda es compatible con versiones anteriores, por lo que puede usarlos en su API existente al migrar su proyecto a java 8.

Veamos algunos otros ejemplos de expresiones Lambda.

Ejemplo 1: Expresión Java Lambda sin parámetros

@FunctionalInterface
interface MyFunctionalInterface {

	//A method with no parameter
    public String sayHello();
}
public class Example {

   public static void main(String args[]) {
        // lambda expression
    	MyFunctionalInterface msg = () -> {
    		return "Hello";
    	};
        System.out.println(msg.sayHello());
    }
}

Producción:

Hello

Ejemplo 2: Expresión Java Lambda con un solo parámetro

@FunctionalInterface
interface MyFunctionalInterface {

	//A method with single parameter
    public int incrementByFive(int a);
}
public class Example {

   public static void main(String args[]) {
        // lambda expression with single parameter num
    	MyFunctionalInterface f = (num) -> num+5;
        System.out.println(f.incrementByFive(22));
    }
}

Producción:

27

Ejemplo 3: expresión Java Lambda con varios parámetros

interface StringConcat {

    public String sconcat(String a, String b);
}
public class Example {

   public static void main(String args[]) {
        // lambda expression with multiple arguments
    	StringConcat s = (str1, str2) -> str1 + str2;
        System.out.println("Result: "+s.sconcat("Hello ", "World"));
    }
}

Producción:

Result: Hello World

Ejemplo 4: colecciones repetidas usando el bucle foreach

import java.util.*;  
public class Example{  
    public static void main(String[] args) {       
       List<String> list=new ArrayList<String>();  
       list.add("Rick");         
       list.add("Negan");       
       list.add("Daryl");         
       list.add("Glenn");         
       list.add("Carl");                
       list.forEach(          
           // lambda expression        
           (names)->System.out.println(names)         
       );     
    }  
}

Podemos iterar mapas y otras clases de colección usando expresión lambda, consulte esta guía: Iterando mapa y lista usando expresión lambda

leer  Java 8 Stream mínimo y máximo

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *