Las expresiones Lambda se introducen en Java 8 y se promociona como la característica más importante de Java 8. La expresión Lambda facilita la programación funcional y simplifica mucho el desarrollo.
Sintaxis
Una expresión lambda se caracteriza por la siguiente sintaxis.
parameter -> expression body
A continuación se muestran las características importantes de una expresión lambda.
-
Declaración de tipo opcional – No es necesario declarar el tipo de parámetro. El compilador puede inferir lo mismo a partir del valor del parámetro.
-
Paréntesis opcional alrededor del parámetro – No es necesario declarar un solo parámetro entre paréntesis. Para varios parámetros, se requieren paréntesis.
-
Tirantes rizados opcionales – No es necesario utilizar llaves en el cuerpo de la expresión si el cuerpo contiene una sola declaración.
-
Palabra clave de retorno opcional – El compilador devuelve automáticamente el valor si el cuerpo tiene una sola expresión para devolver el valor. Se requieren llaves para indicar que la expresión devuelve un valor.
Ejemplo de expresiones lambda
Cree el siguiente programa Java utilizando cualquier editor de su elección en, digamos, C: > JAVA.
Java8Tester.java
public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
Verificar el resultado
Compila la clase usando javac compilador de la siguiente manera:
C:JAVA>javac Java8Tester.java
Ahora ejecute Java8Tester de la siguiente manera:
C:JAVA>java Java8Tester
Debería producir el siguiente resultado:
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
A continuación se presentan los puntos importantes que se deben considerar en el ejemplo anterior.
-
Las expresiones Lambda se utilizan principalmente para definir la implementación en línea de una interfaz funcional, es decir, una interfaz con un único método. En el ejemplo anterior, hemos utilizado varios tipos de expresiones lambda para definir el método de operación de la interfaz MathOperation. Luego, hemos definido la implementación de sayMessage de GreetingService.
-
La expresión Lambda elimina la necesidad de clases anónimas y brinda una capacidad de programación funcional muy simple pero poderosa para Java.
Alcance
Con la expresión lambda, puede hacer referencia a cualquier variable final o variable final efectiva (que se asigna solo una vez). La expresión Lambda arroja un error de compilación si a una variable se le asigna un valor por segunda vez.
Ejemplo de alcance
Cree el siguiente programa Java usando cualquier editor de su elección en, digamos, C: > JAVA.
Java8Tester.java
public class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]) { GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
Verificar el resultado
Compila la clase usando javac compilador de la siguiente manera:
C:JAVA>javac Java8Tester.java
Ahora ejecute Java8Tester de la siguiente manera:
C:JAVA>java Java8Tester
Debería producir el siguiente resultado:
Hello! Mahesh