📌 Expresiones Lambda en Java
Las expresiones lambda en Java permiten tratar funciones como ciudadanos de primera clase,
es decir, permiten pasar comportamientos como parámetros. Antes de Java 8, los métodos
solo podían existir dentro de una clase, pero con lambdas, se pueden definir funciones
anónimas que pueden ser asignadas a variables y pasadas como argumentos.
1️⃣ ¿Qué es una Expresión Lambda?
Una expresión lambda es una forma concisa de escribir una implementación de una interfaz
funcional.
📌 Sintaxis General
(parametros) -> { cuerpo de la función }
parametros → Los argumentos de la función.
-> → Operador lambda, separa los parámetros del cuerpo.
{ cuerpo } → Contiene la lógica de la función.
Ejemplo: Sin Lambda vs Con Lambda
Sin lambdas (Java 7 o anterior):
Runnable tarea = new Runnable() {
@Override
public void run() {
[Link]("Ejecutando tarea...");
};
Con lambda (Java 8+):
Runnable tarea = () -> [Link]("Ejecutando tarea...");
✅ Reduce código innecesario y mejora la legibilidad.
2️⃣ Interfaces Funcionales y Lambdas
Las lambdas solo funcionan con interfaces funcionales, es decir, interfaces que tienen un solo
método abstracto.
Ejemplo: Definiendo una interfaz funcional
@FunctionalInterface
interface Operacion {
int calcular(int a, int b);
}
La siguiente lambda implementa Operacion:
Operacion suma = (a, b) -> a + b;
[Link]([Link](5, 3)); // Output: 8
✅ Las lambdas permiten definir el comportamiento de calcular() sin necesidad de crear clases
anónimas.
3️⃣ Tipos de Parámetros en Lambda
1. Sin parámetros
() -> [Link]("Hola Mundo!");
2. Un solo parámetro (sin paréntesis opcionales)
nombre -> [Link]("Hola " + nombre);
O usando paréntesis (recomendado para claridad):
(nombre) -> [Link]("Hola " + nombre);
3. Múltiples parámetros
(a, b) -> a + b;
4. Cuerpo con múltiples líneas
(a, b) -> {
int resultado = a + b;
[Link]("Suma: " + resultado);
return resultado;
};
✅ Las llaves {} solo son necesarias si hay más de una instrucción.
4️⃣ Uso de Lambdas con Interfaces Funcionales de Java ([Link])
Java proporciona interfaces funcionales listas para usar en [Link].
Interfaz Método Principal Descripción
Supplier<T> T get() No recibe parámetros, devuelve un resultado.
Consumer<T> void accept(T t) Recibe un parámetro, no devuelve nada.
Function<T,R> R apply(T t) Recibe un parámetro y devuelve un resultado.
Predicate<T> boolean test(T t) Recibe un parámetro y devuelve boolean.
Ejemplo: Supplier
Supplier<String> mensaje = () -> "Hola desde Supplier";
[Link]([Link]());
Ejemplo: Consumer
Consumer<String> imprimir = mensaje -> [Link](mensaje);
[Link]("Hola desde Consumer");
Ejemplo: Function
Function<Integer, String> convertir = numero -> "Número: " + numero;
[Link]([Link](10)); // "Número: 10"
Ejemplo: Predicate
Predicate<Integer> esPar = num -> num % 2 == 0;
[Link]([Link](8)); // true
[Link]([Link](7)); // false
5️⃣ Uso Avanzado con Streams y Lambdas
Las expresiones lambda son fundamentales en Stream API, que permite operaciones sobre
colecciones de datos.
Ejemplo 1: Filtrar una lista
List<String> nombres = [Link]("Carlos", "Ana", "Pedro", "Lucas");
List<String> nombresConA = [Link]()
.filter(nombre -> [Link]("A"))
.collect([Link]());
[Link](nombresConA); // [Ana]
Ejemplo 2: Transformar elementos (map())
List<String> nombresMayus = [Link]()
.map(String::toUpperCase)
.collect([Link]());
[Link](nombresMayus); // [CARLOS, ANA, PEDRO, LUCAS]
Ejemplo 3: Sumar números con reduce()
List<Integer> numeros = [Link](1, 2, 3, 4, 5);
int suma = [Link]().reduce(0, (a, b) -> a + b);
[Link](suma); // 15
6️⃣ Ventajas de usar Expresiones Lambda
✅ Código más conciso → Reduce código repetitivo.
✅ Más legible → Hace que el código sea más expresivo.
✅ Mejor rendimiento → Evita la creación de clases anónimas innecesarias.
✅ Permite programación funcional → Facilita el uso de Stream API.
📌 Conclusión
Las expresiones lambda revolucionaron Java al permitir una programación más funcional y
declarativa. Se usan ampliamente en Streams, colecciones, hilos y APIs funcionales.
🚀 ¿Quieres más ejemplos o necesitas ayuda en un caso específico?