Aprende JAVA Funcional

Streams
Los Streams en Java son una API introducida en Java 8 que permite procesar colecciones de datos de manera funcional y declarativa. Un Stream representa una secuencia de elementos que se pueden procesar en paralelo o en serie. Los Streams no almacenan datos, sino que operan sobre ellos y permiten realizar operaciones como filtrado, mapeo, reducción, y más. Por ejemplo:
List<String> names = Arrays.asList("Ana", "Juan", "Pedro");
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
En este ejemplo, se filtran los nombres que comienzan con «A» y se imprimen. Los Streams son ideales para trabajar con grandes volúmenes de datos de forma eficiente.
Filtros
Los filtros son una operación común en los Streams que permiten seleccionar elementos de una colección basándose en una condición lógica. Se implementan mediante el método filter()
y una expresión lambda que define la condición. Por ejemplo:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(n -> n % 2 == 0) // Filtra números pares
.forEach(System.out::println);
En este caso, el filtro selecciona solo los números pares de la lista. Los filtros son fundamentales en la programación funcional para trabajar con subconjuntos de datos
Programación funcional. Lambdas. Interfaces Funcionales
La programación funcional en Java se centra en escribir código más compacto, declarativo y expresivo. Introducida en Java 8, permite tratar funciones como ciudadanos de primera clase, es decir, se pueden pasar como argumentos, devolver como resultados y asignar a variables.
- Lambdas: Una expresión lambda es una función anónima que se utiliza para implementar métodos funcionales de manera concisa. Por ejemplo:
(int x, int y) -> x + y
Esta expresión lambda toma dos parámetros (
x
yy
) y devuelve su suma. Las lambdas son útiles para simplificar el código, especialmente en operaciones como iteraciones y filtros - Interfaces Funcionales: Una interfaz funcional es una interfaz que contiene exactamente un método abstracto. Estas interfaces son la base de las expresiones lambda en Java. Ejemplos comunes incluyen
Runnable
,Callable
, y las interfaces del paquetejava.util.function
comoPredicate
,Function
yConsumer
. Por ejemplo:java@FunctionalInterface interface Operacion { int calcular(int a, int b); }
Aquí,
Operacion
es una interfaz funcional que puede implementarse con una expresión lambda como(a, b) -> a + b
.