Contenu du cours
Multithreading en Java
Multithreading en Java
Défi CompletableFuture
Tâche
Votre tâche consiste à construire un système qui gère les commandes et effectue des calculs supplémentaires comme les coûts de taxe et d'expédition. Vous devez traiter plusieurs commandes asynchrone, effectuer les calculs nécessaires, et afficher le montant total pour chaque commande une fois que tous les calculs sont terminés.
Chaque commande a un identifiant unique et un prix associé. (classe InitMap)
L'ID et leurs sommes sont stockés dans un Map
au sein de la classe InitMap
. Les clés de ce Map
(qui sont les ID de commande) sont celles que nous parcourons dans la méthode processOrders()
.
La récupération des données de commande est effectuée asynchrone et retourne le montant de la commande. Cela est géré par la classe OrderService
, en particulier la méthode fetchOrderAmount(String orderId)
.
La taxe est calculée à 15% du montant de la commande. Cela est géré par la classe CalculationService
, en utilisant la méthode calculateTax()
.
Le coût d'expédition est calculé à 10% du montant de la commande. Cela est également géré par la classe CalculationService
, en utilisant la méthode calculateShipping()
.
Note
Votre tâche principale est de mettre en œuvre la logique étape par étape dans la classe
OrderProcessingExample
du packagetask
dans la méthodeprocessOrders()
.
Étapes de mise en œuvre
1. Recevez le montant de la commande de manière asynchrone en utilisant le service de commande :
- Créez un objet
CompletableFuture
pour récupérer le montant de la commande asynchrone ; - Appelez la méthode
fetchOrderAmount()
deOrderService
en passant l'id de la commande.
Remarque
La méthode
fetchOrderAmount()
utiliseCompletableFuture.supplyAsync()
pour effectuer la tâche de manière asynchrone et retourne le montant de la commande, par son id.
2. Après avoir récupéré le montant de la commande, calculez de manière asynchrone la taxe en utilisant le service de calcul :
- Utilisez
thenCompose()
pour exécuter la tâche séquentiellement après avoir obtenu le montant de la commande. Appelez la méthodecalculateTax()
deCalculationService
en passant le montant de la commande.
Remarque
La méthode
calculateTax()
utiliseCompletableFuture.supplyAsync()
pour exécuter la tâche de manière asynchrone et retourne une taxe égale à 15% du montant de la commande.
3. Après avoir reçu le montant de la commande, calculez de manière asynchrone le coût d'expédition en utilisant le service de calcul :
- Utilisez
thenCompose()
pour exécuter la tâche séquentiellement après avoir reçu le montant de la commande. Appelez la méthodecalculateShipping
deCalculationService
en passant le montant de la commande.
Remarque
La méthode
calculateShipping()
utiliseCompletableFuture.supplyAsync()
pour exécuter la tâche de manière asynchrone et retourne un coût d'expédition égal à 10% du montant de la commande.
4. Combinez les calculs asynchrones de la taxe et du coût d'expédition pour obtenir le coût total supplémentaire :
- Utilisez
thenCombine()
pour combiner deux résultatsCompletableFuture
de taxe et d'expédition pour obtenir le coût supplémentaire total (taxe + coût d'expédition).
5. Combinez le montant de la commande et le coût supplémentaire total pour obtenir le montant total de la commande :
- Utilisez
thenCombine()
pour combiner les deux résultatsCompletableFuture
du coût supplémentaire et du coût supplémentaire total et du montant total de la commande pour obtenir le montant total de la commande.
6. Après avoir calculé le total, affichez-le sur la console :
- Utilisez
thenAccept()
pour traiter et afficher le résultat ; - Après avoir terminé tous les calculs, affichez le total de la commande sur la console.
Pour afficher le résultat sur la console, vous pouvez utiliser ce modèle :
Si vous suivez tout correctement, vous obtiendrez ce résultat dans la console :
Une fois que vous êtes sûr que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/OrderProcessingExampleTest.java
.
Merci pour vos commentaires !