Interfaces Funcionales

La base de la programación funcional en Java

¿Qué es una Interfaz Funcional? Es una interfaz que contiene exactamente un método abstracto. Estas interfaces son la base de la programación funcional en Java, permitiéndonos tratar el comportamiento como un valor y pasar funciones como parámetros.

PREDICATE
Recibe:
Cualquier cosa
Devuelve:
Solo true o false
Cliente envía DNI "12345678" → Sistema verifica → Devuelve TRUE → Continúa operación
FUNCTION
Recibe:
Cualquier cosa
Devuelve:
Cualquier otra cosa
Sistema recibe Cliente "María" → Procesa datos → Devuelve "003102938470055" como código CCI
CONSUMER
Recibe:
Cualquier cosa
Devuelve:
NADA
Sistema recibe Cuenta #12345 → Envía SMS "Su depósito fue procesado" → No devuelve nada
SUPPLIER
Recibe:
NADA
Devuelve:
Cualquier cosa
Usuario presiona "Generar" → Sin datos de entrada → Sistema produce "OPE8742LIM" como código
BIFUNCTION
Recibe:
Dos cosas de cualquier tipo
Devuelve:
Cualquier otra cosa
Sistema recibe Monto 6000 y Tipo "Sueldo" → Evalúa ambos → Devuelve "Necesita autorización"
COMPARATOR
Recibe:
Dos objetos del mismo tipo
Devuelve:
Número entero (negativo, cero o positivo)
Sistema recibe Cliente A y Cliente B → Compara saldos → Devuelve -1 (A tiene menos saldo)

Ejemplo de aplicación en código

// Uso encadenado de interfaces funcionales
clientesValidos.stream()
    // Predicate
    .filter(cliente -> cliente.getSaldo() > 5000)
    
    // Function
    .map(cliente -> {
        // Supplier
        String codigo = generarCodigo.get();
        
        // BiFunction
        double comision = calcularComision.apply(cliente.getSaldo());
        
        return "Cliente: " + cliente.getNombre() + 
               " | Código: " + codigo +
               " | Comisión: S/." + comision;
    })
    // Consumer
    .forEach(System.out::println);