Uitdaging: CompletableFuture
Taak
De opdracht is om een systeem te bouwen dat bestellingen verwerkt en aanvullende berekeningen uitvoert, zoals belasting en verzendkosten. Het is vereist om meerdere bestellingen asynchroon te verwerken, de benodigde berekeningen uit te voeren en het totaalbedrag voor elke bestelling weer te geven zodra alle berekeningen zijn voltooid.
Elke bestelling heeft een unieke identificatie en een prijs. (InitMap class)
De ID en hun totalen worden opgeslagen in een Map binnen de klasse InitMap. De sleutels van deze Map (de bestel ID's) worden doorlopen in de methode processOrders().
Het ophalen van bestelgegevens gebeurt asynchroon en geeft het bestelbedrag terug. Dit wordt afgehandeld door de klasse OrderService, specifiek de methode fetchOrderAmount(String orderId).
Belasting wordt berekend als 15% van het bestelbedrag. Dit wordt beheerd door de klasse CalculationService, met behulp van de methode calculateTax().
De verzendkosten worden berekend als 10% van het bestelbedrag. Dit wordt ook afgehandeld door de klasse CalculationService, met behulp van de methode calculateShipping().
De hoofdtaak is om de logica stapsgewijs te implementeren in het package task klasse OrderProcessingExample in de methode processOrders().
Implementatiestappen
1. Ontvang het orderbedrag asynchroon met behulp van de order service:
- Maak een
CompletableFuture-object aan om het orderbedrag asynchroon op te halen; - Roep de methode
fetchOrderAmount()vanOrderServiceaan met de order id.
De methode fetchOrderAmount() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert het orderbedrag op basis van het id.
2. Na het ophalen van het orderbedrag, asynchroon de belasting berekenen met behulp van de berekeningsservice:
- Gebruik
thenCompose()om de taak sequentieel uit te voeren nadat het orderbedrag is verkregen. Roep de methodecalculateTax()aan vanCalculationServiceen geef het orderbedrag door.
De methode calculateTax() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert een belasting gelijk aan 15% van het orderbedrag.
3. Na ontvangst van het orderbedrag, asynchroon de verzendkosten berekenen met behulp van de calculate-service:
- Gebruik
thenCompose()om de taak sequentieel uit te voeren nadat het orderbedrag is ontvangen. Roep de methodecalculateShippingaan vanCalculationServiceen geef het orderbedrag door.
De methode calculateShipping() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert een verzendkosten gelijk aan 10% van het orderbedrag.
4. Combineer de asynchrone berekeningen van belasting en verzendkosten om de totale incrementele kosten te verkrijgen:
- Gebruik
thenCombine()om tweeCompletableFuture-resultaten van belasting en verzendkosten te combineren om de totale bijkomende kosten (belasting + verzendkosten) te verkrijgen.
5. Combineer het orderbedrag en de totale bijkomende kosten om het totale orderbedrag te berekenen:
- Gebruik
thenCombine()om de tweeCompletableFuture-resultaten van bijkomende kosten en totaal orderbedrag te combineren om het totale orderbedrag te verkrijgen.
6. Na het berekenen van het totaal, deze naar de console uitvoeren:
- Gebruik
thenAccept()om het resultaat te verwerken en uit te voeren; - Na het voltooien van alle berekeningen, het order totaal naar de console uitvoeren.
Om het resultaat weer te geven op de console, kan dit patroon worden gebruikt:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Bij correcte uitvoering verschijnt deze uitvoer op de console:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Zodra alles naar behoren werkt, de verificatietests uitvoeren op het pad /src/test/java/OrderProcessingExampleTest.java.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.33
Uitdaging: CompletableFuture
Veeg om het menu te tonen
Taak
De opdracht is om een systeem te bouwen dat bestellingen verwerkt en aanvullende berekeningen uitvoert, zoals belasting en verzendkosten. Het is vereist om meerdere bestellingen asynchroon te verwerken, de benodigde berekeningen uit te voeren en het totaalbedrag voor elke bestelling weer te geven zodra alle berekeningen zijn voltooid.
Elke bestelling heeft een unieke identificatie en een prijs. (InitMap class)
De ID en hun totalen worden opgeslagen in een Map binnen de klasse InitMap. De sleutels van deze Map (de bestel ID's) worden doorlopen in de methode processOrders().
Het ophalen van bestelgegevens gebeurt asynchroon en geeft het bestelbedrag terug. Dit wordt afgehandeld door de klasse OrderService, specifiek de methode fetchOrderAmount(String orderId).
Belasting wordt berekend als 15% van het bestelbedrag. Dit wordt beheerd door de klasse CalculationService, met behulp van de methode calculateTax().
De verzendkosten worden berekend als 10% van het bestelbedrag. Dit wordt ook afgehandeld door de klasse CalculationService, met behulp van de methode calculateShipping().
De hoofdtaak is om de logica stapsgewijs te implementeren in het package task klasse OrderProcessingExample in de methode processOrders().
Implementatiestappen
1. Ontvang het orderbedrag asynchroon met behulp van de order service:
- Maak een
CompletableFuture-object aan om het orderbedrag asynchroon op te halen; - Roep de methode
fetchOrderAmount()vanOrderServiceaan met de order id.
De methode fetchOrderAmount() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert het orderbedrag op basis van het id.
2. Na het ophalen van het orderbedrag, asynchroon de belasting berekenen met behulp van de berekeningsservice:
- Gebruik
thenCompose()om de taak sequentieel uit te voeren nadat het orderbedrag is verkregen. Roep de methodecalculateTax()aan vanCalculationServiceen geef het orderbedrag door.
De methode calculateTax() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert een belasting gelijk aan 15% van het orderbedrag.
3. Na ontvangst van het orderbedrag, asynchroon de verzendkosten berekenen met behulp van de calculate-service:
- Gebruik
thenCompose()om de taak sequentieel uit te voeren nadat het orderbedrag is ontvangen. Roep de methodecalculateShippingaan vanCalculationServiceen geef het orderbedrag door.
De methode calculateShipping() gebruikt CompletableFuture.supplyAsync() om de taak asynchroon uit te voeren en retourneert een verzendkosten gelijk aan 10% van het orderbedrag.
4. Combineer de asynchrone berekeningen van belasting en verzendkosten om de totale incrementele kosten te verkrijgen:
- Gebruik
thenCombine()om tweeCompletableFuture-resultaten van belasting en verzendkosten te combineren om de totale bijkomende kosten (belasting + verzendkosten) te verkrijgen.
5. Combineer het orderbedrag en de totale bijkomende kosten om het totale orderbedrag te berekenen:
- Gebruik
thenCombine()om de tweeCompletableFuture-resultaten van bijkomende kosten en totaal orderbedrag te combineren om het totale orderbedrag te verkrijgen.
6. Na het berekenen van het totaal, deze naar de console uitvoeren:
- Gebruik
thenAccept()om het resultaat te verwerken en uit te voeren; - Na het voltooien van alle berekeningen, het order totaal naar de console uitvoeren.
Om het resultaat weer te geven op de console, kan dit patroon worden gebruikt:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Bij correcte uitvoering verschijnt deze uitvoer op de console:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Zodra alles naar behoren werkt, de verificatietests uitvoeren op het pad /src/test/java/OrderProcessingExampleTest.java.
Bedankt voor je feedback!