Vavr pour Java : Guide complet de programmation fonctionnelle
1. Qu'est-ce que Vavr et pourquoi l'utiliser ?
Vavr (anciennement Javaslang) est une bibliothèque puissante pour la programmation fonctionnelle en Java. Elle propose des collections immuables, des structures de données fonctionnelles et des utilitaires pour travailler avec des fonctions d'ordre supérieur. Contrairement à la Java Collections Framework standard, Vavr met l'accent sur l'immutabilité et l'expressivité du code, permettant d'écrire des programmes plus prévisibles, thread-safe et concis.
Pourquoi utiliser Vavr ? Java moderne (à partir de la version 8) a introduit les expressions lambda et le Stream API, mais les collections standard restent mutables. Cela entraîne des effets de bord, des difficultés en programmation concurrente et beaucoup de code boilerplate. Vavr résout ces problèmes en offrant :
- Des collections immuables (List, Set, Map) avec une API riche, similaire à Scala ou Kotlin.
- Les types Option, Try, Either, Validation pour gérer null, les exceptions et les erreurs sans blocs try-catch.
- Des tuples (Tuple) pour regrouper des valeurs de types différents sans créer de DTO.
- Des interfaces fonctionnelles (FunctionN, CheckedFunction) avec composition, mémoïsation et application partielle.
- L'évaluation paresseuse (Lazy) et le Pattern Matching.
Vavr est particulièrement utile dans les projets nécessitant une haute fiabilité (systèmes financiers, traitement de données), la concurrence (l'immutabilité simplifie le parallélisme) ou simplement l'envie d'écrire un code plus déclaratif et propre. Elle ne remplace pas Java standard, mais le complète, vous permettant de choisir le bon outil pour chaque tâche.
2. Installation
Vavr est disponible sur Maven Central. Pour l'ajouter à votre projet, utilisez l'un des systèmes de build suivants :
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")
Pour le système de modules Java 9+, ajoutez dans module-info.java :
requires vavr;
La version actuelle au moment de la rédaction est la 0.10.4 (sortie en 2019, mais stable et largement utilisée). Vérifiez la dernière version sur MVNRepository.
3. Démarrage rapide — exemple minimal fonctionnel
Créez une classe VavrDemo.java et exécutez-la :
import io.vavr.collection.List;
import io.vavr.control.Option;
public class VavrDemo {
public static void main(String[] args) {
// Création d'une liste immuable
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
// Transformation fonctionnelle
List<Integer> doubled = numbers
.filter(n -> n % 2 == 0) // pairs
.map(n -> n * 2); // doubler
System.out.println(doubled); // List(4, 8)
// Option à la place d'Optional
Option<String> maybeName = Option.of("Alice");
String greeting = maybeName
.map(name -> "Bonjour, " + name)
.getOrElse("Bonjour, inconnu");
System.out.println(greeting); // Bonjour, Alice
}
}
Cet exemple illustre deux fonctionnalités clés : les collections immuables avec chaînage de méthodes et la gestion sécurisée de null via Option.
4. Méthodes, fonctions et classes principales
4.1. Option — alternative sécurisée à Optional
Aussi dans la bibliothèque
Elasticsearch .NET pour C# : guide complet avec exemples
Authentification et autorisation en C++ : bibliothèques et exemples pratiques
Traitement JSON en Rust : bibliothèques serde_json et json
Bibliothèque kotlinx.serialization pour le traitement JSON en Kotlin