Défi : CompletableFuture
Tâche
Votre tâche consiste à concevoir un système qui gère les commandes et effectue des calculs supplémentaires tels que les taxes et les frais de livraison. Il est nécessaire de traiter plusieurs commandes de manière asynchrone, d'effectuer les calculs requis, et d'afficher le montant total pour chaque commande une fois que tous les calculs sont terminés.
Chaque commande possède un identifiant unique et un prix qui lui est associé. (Classe InitMap)
Les ID et leurs montants sont stockés dans une Map au sein de la classe InitMap. Les clés de cette Map (qui correspondent aux ID de commande) sont celles sur lesquelles nous itérons dans la méthode processOrders().
La récupération des données de commande s'effectue de manière asynchrone et retourne le montant de la commande. Ceci est géré par la classe OrderService, en particulier par la méthode fetchOrderAmount(String orderId).
La taxe est calculée à 15% du montant de la commande. Cette opération est assurée par la classe CalculationService, via la méthode calculateTax().
Les frais de livraison sont calculés à 10% du montant de la commande. Ceci est également géré par la classe CalculationService, via la méthode calculateShipping().
Votre tâche principale consiste à implémenter la logique étape par étape dans la classe task du package OrderProcessingExample, dans la méthode processOrders().
Étapes d’implémentation
1. Recevoir le montant de la commande de manière asynchrone à l’aide du service de commande :
- Créer un objet
CompletableFuturepour récupérer le montant de la commande de façon asynchrone ; - Appeler la méthode
fetchOrderAmount()deOrderServiceen passant l’identifiant de la commande.
La méthode fetchOrderAmount() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de manière asynchrone et retourne le montant de la commande, selon son identifiant.
2. Après avoir récupéré le montant de la commande, calcul du taxe de manière asynchrone à l'aide du service de calcul :
- Utiliser
thenCompose()pour exécuter la tâche de façon séquentielle après l'obtention du montant de la commande. Appeler la méthodecalculateTax()deCalculationServiceen passant le montant de la commande.
La méthode calculateTax() utilise CompletableFuture.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, calcul asynchrone du coût d'expédition à l'aide du service de calcul :
- Utiliser
thenCompose()pour exécuter la tâche de manière séquentielle après la réception du montant de la commande. Appeler la méthodecalculateShippingdeCalculationServiceen passant le montant de la commande.
La méthode calculateShipping() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de façon asynchrone et retourne un coût d'expédition égal à 10 % du montant de la commande.
4. Combinaison des calculs asynchrones de la taxe et du coût d'expédition pour obtenir le coût supplémentaire total :
- Utiliser
thenCombine()pour combiner les deux résultatsCompletableFuturede la taxe et de l'expédition afin d'obtenir le coût supplémentaire total (taxe + coût d'expédition).
5. Combinaison du montant de la commande et du coût supplémentaire total pour obtenir le montant total de la commande :
- Utiliser
thenCombine()pour combiner les deux résultatsCompletableFuturedu coût supplémentaire et du montant total de la commande afin d'obtenir le montant total de la commande.
6. Après le calcul du total, affichage dans la console :
- Utiliser
thenAccept()pour traiter et afficher le résultat ; - Après avoir terminé tous les calculs, afficher le total de la commande dans la console.
Pour afficher le résultat dans la console, utilisez ce modèle :
System.out.println("Final total for " + orderId + ": " + finalTotal);
Si tout est fait correctement, vous obtiendrez cette sortie dans la console :
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Une fois que vous avez vérifié que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/OrderProcessingExampleTest.java.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you explain how to implement the asynchronous order processing in code?
What should the structure of the InitMap, OrderService, and CalculationService classes look like?
Can you walk me through an example of processing a single order step by step?
Awesome!
Completion rate improved to 3.33
Défi : CompletableFuture
Glissez pour afficher le menu
Tâche
Votre tâche consiste à concevoir un système qui gère les commandes et effectue des calculs supplémentaires tels que les taxes et les frais de livraison. Il est nécessaire de traiter plusieurs commandes de manière asynchrone, d'effectuer les calculs requis, et d'afficher le montant total pour chaque commande une fois que tous les calculs sont terminés.
Chaque commande possède un identifiant unique et un prix qui lui est associé. (Classe InitMap)
Les ID et leurs montants sont stockés dans une Map au sein de la classe InitMap. Les clés de cette Map (qui correspondent aux ID de commande) sont celles sur lesquelles nous itérons dans la méthode processOrders().
La récupération des données de commande s'effectue de manière asynchrone et retourne le montant de la commande. Ceci est géré par la classe OrderService, en particulier par la méthode fetchOrderAmount(String orderId).
La taxe est calculée à 15% du montant de la commande. Cette opération est assurée par la classe CalculationService, via la méthode calculateTax().
Les frais de livraison sont calculés à 10% du montant de la commande. Ceci est également géré par la classe CalculationService, via la méthode calculateShipping().
Votre tâche principale consiste à implémenter la logique étape par étape dans la classe task du package OrderProcessingExample, dans la méthode processOrders().
Étapes d’implémentation
1. Recevoir le montant de la commande de manière asynchrone à l’aide du service de commande :
- Créer un objet
CompletableFuturepour récupérer le montant de la commande de façon asynchrone ; - Appeler la méthode
fetchOrderAmount()deOrderServiceen passant l’identifiant de la commande.
La méthode fetchOrderAmount() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de manière asynchrone et retourne le montant de la commande, selon son identifiant.
2. Après avoir récupéré le montant de la commande, calcul du taxe de manière asynchrone à l'aide du service de calcul :
- Utiliser
thenCompose()pour exécuter la tâche de façon séquentielle après l'obtention du montant de la commande. Appeler la méthodecalculateTax()deCalculationServiceen passant le montant de la commande.
La méthode calculateTax() utilise CompletableFuture.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, calcul asynchrone du coût d'expédition à l'aide du service de calcul :
- Utiliser
thenCompose()pour exécuter la tâche de manière séquentielle après la réception du montant de la commande. Appeler la méthodecalculateShippingdeCalculationServiceen passant le montant de la commande.
La méthode calculateShipping() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de façon asynchrone et retourne un coût d'expédition égal à 10 % du montant de la commande.
4. Combinaison des calculs asynchrones de la taxe et du coût d'expédition pour obtenir le coût supplémentaire total :
- Utiliser
thenCombine()pour combiner les deux résultatsCompletableFuturede la taxe et de l'expédition afin d'obtenir le coût supplémentaire total (taxe + coût d'expédition).
5. Combinaison du montant de la commande et du coût supplémentaire total pour obtenir le montant total de la commande :
- Utiliser
thenCombine()pour combiner les deux résultatsCompletableFuturedu coût supplémentaire et du montant total de la commande afin d'obtenir le montant total de la commande.
6. Après le calcul du total, affichage dans la console :
- Utiliser
thenAccept()pour traiter et afficher le résultat ; - Après avoir terminé tous les calculs, afficher le total de la commande dans la console.
Pour afficher le résultat dans la console, utilisez ce modèle :
System.out.println("Final total for " + orderId + ": " + finalTotal);
Si tout est fait correctement, vous obtiendrez cette sortie dans la console :
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Une fois que vous avez vérifié que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/OrderProcessingExampleTest.java.
Merci pour vos commentaires !