Las expresiones lambda se
introdujeron en Java 8 para simplificar la programación funcional. Permiten
escribir código más conciso y legible al implementar interfaces funcionales de
manera directa.
1. Sintaxis básica de lambdas
Ejemplos de sintaxis:
() ->
System.out.println("Hola mundo");
x -> x * x;
(x, y) -> x + y;
(x, y) -> { int suma =
x + y; return suma; };
2. Uso con interfaces funcionales
(java.util.function)
Predicate<T> → retorna boolean
Predicate<Integer>
esPar = n -> n % 2 == 0;
System.out.println(esPar.test(4)); // true
Function<T,R> → recibe T, devuelve
R
Function<String, Integer> longitud =
s -> s.length();
System.out.println(longitud.apply("Lambda")); // 6
Consumer<T> → recibe T, no
devuelve nada
Consumer<String> imprimir = s ->
System.out.println(s.toUpperCase());
imprimir.accept("hola"); // HOLA
Supplier<T> → no recibe
parámetros, devuelve T
Supplier<Double> aleatorio = () ->
Math.random();
System.out.println(aleatorio.get());
BiFunction<T,U,R> → dos entradas,
una salida
BiFunction<Integer, Integer, Integer>
suma = (a, b) -> a + b;
System.out.println(suma.apply(5, 7)); // 12
UnaryOperator<T> → una entrada,
misma salida
UnaryOperator<Integer>
cuadrado = x -> x * x;
System.out.println(cuadrado.apply(5)); // 25
BinaryOperator<T> → dos entradas
del mismo tipo, misma salida
BinaryOperator<Integer> max = (a, b)
-> a > b ? a : b;
System.out.println(max.apply(5, 8)); // 8
3. Uso con Streams
List<String> nombres =
Arrays.asList("Ana", "Luis", "Pedro",
"Mara");
// Filtrar
nombres.stream().filter(n ->
n.startsWith("A")).forEach(System.out::println);
// Mapear
nombres.stream().map(n -> n.toUpperCase()).forEach(System.out::println);
// Ordenar
nombres.stream().sorted((a, b) ->
a.compareTo(b)).forEach(System.out::println);
4. Uso con Hilos (Runnable)
new Thread(() -> System.out.println("Ejecutando hilo con lambda...")).start();
5. Uso con Eventos en GUI (Swing/JavaFX)
JButton boton = new
JButton("Click");
boton.addActionListener(e -> System.out.println("Botón presionado"));
6. Uso con Colecciones
List<Integer> lista
= Arrays.asList(1,2,3,4,5);
// Iteración
lista.forEach(n -> System.out.println(n));
// Eliminar si cumple condición
lista.removeIf(n -> n % 2 == 0);
// Ordenar con Comparator
lista.sort((a, b) -> b - a);
Resumen de aplicaciones
✅ Menos código (reemplazo
de clases anónimas)
✅ Programación funcional
en Java
✅ Uso con Streams para
trabajar con colecciones
✅ Uso en interfaces
funcionales (Predicate, Consumer, etc.)
✅ Uso en multithreading
(Runnable)
✅ Uso en manejo de
eventos (GUI)
✅ Uso en operaciones
sobre colecciones (forEach, sort, removeIf)