Vavr para Java: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Vavr para Java: Guia Completo de Programação Funcional

1. O que é Vavr e por que usá-la?

Vavr (anteriormente conhecida como Javaslang) é uma poderosa biblioteca de programação funcional para Java que oferece coleções imutáveis, estruturas de dados funcionais e utilitários para trabalhar com funções de alta ordem. Diferente do Java Collections Framework padrão, a Vavr prioriza a imutabilidade e a expressividade do código, permitindo escrever programas mais previsíveis, thread-safe e concisos.

Por que usar Vavr? No Java moderno (a partir da versão 8), temos expressões lambda e Stream API, mas as coleções padrão ainda são mutáveis. Isso gera efeitos colaterais, dificuldades em programação concorrente e a necessidade de escrever muito código boilerplate. A Vavr resolve esses problemas oferecendo:

  • Coleções imutáveis (List, Set, Map) com uma API rica, similar a Scala ou Kotlin.
  • Tipos Option, Try, Either, Validation para tratamento seguro de null, exceções e erros sem blocos try-catch.
  • Tuplas (Tuple) para agrupar valores de tipos diferentes sem criar DTOs.
  • Interfaces funcionais (FunctionN, CheckedFunction) com composição, memoização e aplicação parcial.
  • Computação lazy (Lazy) e Pattern Matching.

A Vavr é especialmente útil em projetos que exigem alta confiabilidade (sistemas financeiros, processamento de dados), concorrência (imutabilidade simplifica o paralelismo) ou simplesmente para quem deseja escrever código mais declarativo e limpo. Ela não substitui o Java padrão, mas o complementa, permitindo escolher a ferramenta certa para cada tarefa.

2. Instalação

A Vavr é distribuída via Maven Central. Para adicioná-la ao seu projeto, use um dos seguintes sistemas de build:

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 o sistema de módulos do Java 9+, adicione em module-info.java:

requires vavr;

A versão atual no momento da escrita deste artigo é a 0.10.4 (lançada em 2019, mas estável e amplamente utilizada). Verifique a versão mais recente em MVNRepository.

3. Primeiros passos — exemplo mínimo funcional

Crie a classe VavrDemo.java e execute-a:

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

public class VavrDemo {
    public static void main(String[] args) {
        // Criando uma lista imutável
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        // Transformação funcional
        List<Integer> doubled = numbers
            .filter(n -> n % 2 == 0)   // pares
            .map(n -> n * 2);          // dobrar

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

        // Option no lugar de Optional
        Option<String> maybeName = Option.of("Alice");
        String greeting = maybeName
            .map(name -> "Olá, " + name)
            .getOrElse("Olá, estranho");

        System.out.println(greeting); // Olá, Alice
    }
}

Este exemplo mostra dois recursos principais: coleções imutáveis com encadeamento de métodos e tratamento seguro de null com Option.

4. Principais métodos, funções e classes

4.1. Option — substituto seguro para Optional

Recommendations