Vavr Java: Guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Vavr para Java: Guía completa de programación funcional

1. ¿Qué es Vavr y por qué usarla?

Vavr (anteriormente conocida como Javaslang) es una potente librería de programación funcional para Java que ofrece colecciones inmutables, estructuras de datos funcionales y utilidades para trabajar con funciones de orden superior. A diferencia del Java Collections Framework estándar, Vavr prioriza la inmutabilidad y la expresividad del código, permitiendo escribir programas más predecibles, seguros para hilos y concisos.

¿Por qué usar Vavr? Aunque Java moderno (desde la versión 8) incluye expresiones lambda y Stream API, las colecciones estándar siguen siendo mutables. Esto genera efectos secundarios, complicaciones en programación concurrente y la necesidad de escribir mucho código repetitivo. Vavr resuelve estos problemas ofreciendo:

  • Colecciones inmutables (List, Set, Map) con una API enriquecida, similar a Scala o Kotlin.
  • Tipos Option, Try, Either, Validation para manejar de forma segura valores nulos, excepciones y errores sin bloques try-catch.
  • Tuplas (Tuple) para agrupar valores de diferentes tipos sin necesidad de crear DTOs.
  • Interfaces funcionales (FunctionN, CheckedFunction) con composición, memoización y aplicación parcial.
  • Cálculos perezosos (Lazy) y Pattern Matching.

Vavr es especialmente útil en proyectos que requieren alta fiabilidad (sistemas financieros, procesamiento de datos), concurrencia (la inmutabilidad simplifica el paralelismo) o simplemente el deseo de escribir código más declarativo y limpio. No reemplaza a Java estándar, sino que lo complementa, permitiendo elegir la herramienta adecuada para cada tarea.

2. Instalación

Vavr se distribuye a través de Maven Central. Para añadirla a tu proyecto, usa uno de estos sistemas de compilación:

Maven

<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr</artifactId>
    <version>0.10.4</version>
</dependency>

Gradle

implementation 'io.vavr:vavr:0.10.4'

Gradle (Kotlin DSL)

implementation("io.vavr:vavr:0.10.4")

Para el sistema de módulos de Java 9+, añade en module-info.java:

requires vavr;

La versión actual al escribir este artículo es la 0.10.4 (publicada en 2019, pero estable y ampliamente utilizada). Puedes verificar la última versión en MVNRepository.

3. Inicio rápido — ejemplo mínimo funcional

Crea la clase VavrDemo.java y ejecútala:

import io.vavr.collection.List;
import io.vavr.control.Option;

public class VavrDemo {
    public static void main(String[] args) {
        // Creamos una lista inmutable
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        // Transformación funcional
        List<Integer> doubled = numbers
            .filter(n -> n % 2 == 0)   // pares
            .map(n -> n * 2);          // duplicar

        System.out.println(doubled); // List(4, 8)

        // Option en lugar de Optional
        Option<String> maybeName = Option.of("Ana");
        String greeting = maybeName
            .map(name -> "Hola, " + name)
            .getOrElse("Hola, desconocido");

        System.out.println(greeting); // Hola, Ana
    }
}

Este ejemplo muestra dos capacidades clave: colecciones inmutables con encadenamiento de métodos y manejo seguro de nulos mediante Option.

4. Métodos, funciones y clases principales

4.1. Option — sustituto seguro de Optional

Recommendations