Java 8 - Expresiones lambda
Las expresiones lambda se introducen en Java 8 y se promocionan como la función 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
Las siguientes son las características importantes de una expresión lambda.
-
Declaración de tipo opcional − No es necesario declarar el tipo de un 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.
-
llaves opcionales − No es necesario usar 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, por ejemplo, C:\> JAVA.
Java8Tester.java
Demostración en vivopublic 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
Compile 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
Los siguientes son los puntos importantes a 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 solo método. En el ejemplo anterior, hemos usado 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 una clase anónima y brinda una capacidad de programación funcional muy simple pero poderosa para Java.
Alcance
Usando la expresión lambda, puede referirse a cualquier variable final o variable final efectiva (que se asigna solo una vez). La expresión lambda genera un error de compilación si se asigna un valor a una variable por segunda vez.
Ejemplo de alcance
Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.
Java8Tester.java
Demostración en vivopublic 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
Compile 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
Java