Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Uitdaging: CompletableFuture | Best Practices voor Multithreading
Multithreading in Java

bookUitdaging: 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().

Note
Opmerking

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() van OrderService aan met de order id.
Note
Opmerking

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 methode calculateTax() aan van CalculationService en geef het orderbedrag door.
Note
Opmerking

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 methode calculateShipping aan van CalculationService en geef het orderbedrag door.
Note
Opmerking

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 twee CompletableFuture-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 twee CompletableFuture-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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 3.33

bookUitdaging: 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().

Note
Opmerking

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() van OrderService aan met de order id.
Note
Opmerking

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 methode calculateTax() aan van CalculationService en geef het orderbedrag door.
Note
Opmerking

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 methode calculateShipping aan van CalculationService en geef het orderbedrag door.
Note
Opmerking

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 twee CompletableFuture-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 twee CompletableFuture-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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 7
some-alt