Dominar Expresiones Lambda en Java 8: Guía de Programación Funcional
Las expresiones lambda se introdujeron en Java 8 y se consideran la característica más grande 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.
parámetro -> cuerpo de expresión
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 un parámetro. El compilador puede inferirlo del valor del parámetro.
Paréntesis opcionales alrededor del parámetro - No es necesario declarar un solo parámetro entre paréntesis. Para múltiples 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 return opcional - El compilador devuelve automáticamente el valor si el cuerpo tiene una sola expresión para devolver el valor. Las llaves son necesarias para indicar que la expresión devuelve un valor.
Ejemplo de Expresiones Lambda
Crea el siguiente programa Java usando cualquier editor de tu elección en, digamos, C:\JAVA.
Java8Tester.java
public class Java8Tester {
public static void main(String args[]) {
Java8Tester tester = new Java8Tester();
// con declaración de tipo
MathOperation addition = (int a, int b) -> a + b;
// sin declaración de tipo
MathOperation subtraction = (a, b) -> a - b;
// con return y llaves
MathOperation multiplication = (int a, int b) -> { return a * b; };
// sin return y sin llaves
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));
// sin paréntesis
GreetingService greetService1 = message -> System.out.println("Hola " + message);
// con paréntesis
GreetingService greetService2 = (message) -> System.out.println("Hola " + 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 el compilador javac de la siguiente manera:
C:\JAVA>javac Java8Tester.java
Ahora ejecuta Java8Tester de la siguiente manera:
C:\JAVA>java Java8Tester
Debería producir la siguiente salida:
10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hola Mahesh
Hola Suresh
A continuación se muestran los puntos importantes a considerar en el ejemplo anterior.
Las expresiones lambda se usan principalmente para definir 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 operation de la interfaz MathOperation. Luego hemos definido la implementación de sayMessage de GreetingService.
La expresión lambda elimina la necesidad de clase anónima y da una capacidad de programación funcional muy simple pero poderosa a Java.
Alcance
Usando expresión lambda, puedes referirte a cualquier variable final o variable efectivamente final (que se asigna solo una vez). La expresión lambda lanza error de compilación si una variable se le asigna un valor por segunda vez.
Ejemplo de Alcance
Crea el siguiente programa Java usando cualquier editor de tu elección en, digamos, C:\JAVA.
Java8Tester.java
public class Java8Tester {
final static String salutation = "¡Hola! ";
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 el compilador javac de la siguiente manera:
C:\JAVA>javac Java8Tester.java
Ahora ejecuta Java8Tester de la siguiente manera:
C:\JAVA>java Java8Tester
Debería producir la siguiente salida:
¡Hola! Mahesh
Java
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Entender Expresiones, Sentencias y Bloques en Java
- Comentarios en Java: Tipos, Uso y Mejores Prácticas
- Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
- Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
- Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
- Entendiendo Java Vector: Uso, Características y Comparación con ArrayList