DEV Community

Mathieu Marchadour for Avalon Lab

Posted on

Utiliser les Futures avec Vavr

Introduction

Dans le cadre d’un projet chez l’un de nos clients, on nous a chargé de réaliser une API. Celle-ci avait la responsabilité d’agréger différentes données venant de plusieurs API.

À des fins de performance, nous avons choisi de paralléliser les appels et d’utiliser les Futures.


Présentation

La librairie Vavr est utilisable à partir de la version 8 de Java.

Cette librairie a pour but d’améliorer le coté programmation fonctionnelle de Java 8 en ajoutant notamment des types de données immuables et des structures de contrôles orientés fonctionnelles.

C'est parmi ces types de données immuables que nous trouvons notre Future, objet de cet article.

Une Future va permettre de réaliser une action dont le résultat sera disponible dans le futur.

Lorsque l'action de la Future est terminée, trois états de celle-ci sont possibles :

  • completed: lorsque la Future s'est terminée

  • success: lorsque la Future s'est terminée avec succès

  • failure: lorsque la Future s'est terminée en erreur

Il est possible d'ajouter des callbacks afin d'intercepter ces trois états.

Chez notre client, cela permettait de lancer X actions (Futures) permettant de récupérer des données, attendre le résultat de chacune et agréger toutes les données. Pour mettre en place ceci, nous avons créé une liste de Futures, les avons packagées dans une séquence. Nous devons attendre le résultat de toutes les Futures et avons donc bloqué les différents Thread grâce à la méthode .await(). Ensuite, la méthode .get() nous permet d’obtenir le résultat de la Future.


Illustration : la course d'animaux

Afin de lancer la course et de vous présenter les Futures, nous allons réaliser un test unitaire.

Création de la classe Java Animal avec son nom, sa famille, son type et vitesse moyenne. L'annotation @Data vient du projet Lombok : une librairie de génération de code. Ce projet fera l'objet d'un autre article.

Ici, nous initialisons 5 animaux qui sont de famille et de vitesse différentes.

Le test unitaire:

Résultat du test unitaire :

Conclusion

Grâce à ce test unitaire, nous avons utilisé la librairie Vavr, disponible à partir de Java 8, afin de paralléliser des traitements. Cette librairie ne permet pas uniquement l’utilisation de Future mais elle implémente aussi des Collections, List, Map, Option, Try …

La documentation de Vavr est disponible ci-dessous afin d’approfondir cette librairie.

Documentation

Site officiel Vavr

Introduction to Future in Vavr | Baeldung

Top comments (0)