Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Completablefuture | Bedste Praksis for Multitrådning
Quizzes & Challenges
Quizzes
Challenges
/
Multitrådning i Java

bookUdfordring: Completablefuture

Opgave

Opgaven er at opbygge et system, der håndterer ordrer og udfører yderligere beregninger såsom skat og forsendelsesomkostninger. Du skal behandle flere ordrer asynkront, udføre de nødvendige beregninger og vise det samlede beløb for hver ordre, når alle beregninger er afsluttet.

Hver ordre har en unik identifikator og en pris tilknyttet. (InitMap-klassen)

ID'erne og deres summer gemmes i et Map i InitMap-klassen. Nøglerne i dette Map (som er ordre-ID'erne) er dem, vi gennemløber i processOrders()-metoden.

Hentning af ordredata udføres asynkront og returnerer ordrebeløbet. Dette håndteres af OrderService-klassen, specifikt fetchOrderAmount(String orderId)-metoden.

Skat beregnes som 15% af ordrebeløbet. Dette administreres af CalculationService-klassen ved brug af calculateTax()-metoden.

Forsendelsesomkostninger beregnes som 10% af ordrebeløbet. Dette håndteres også af CalculationService-klassen ved brug af calculateShipping()-metoden.

Note
Bemærk

Din hovedopgave er at implementere logikken trin for trin i pakken task klassen OrderProcessingExample i metoden processOrders().

Implementeringstrin

1. Modtag ordrebeløbet asynkront ved hjælp af ordre-servicen:

  • Opret et CompletableFuture-objekt for at hente ordrebeløbet asynkront;
  • Kald metoden fetchOrderAmount() fra OrderService med order id som parameter.
Note
Bemærk

fetchOrderAmount()-metoden anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer ordrebeløbet ud fra dets id.

2. Efter indhentning af ordrebeløbet, beregn asynkront skat ved hjælp af beregningstjenesten:

  • Brug thenCompose() til at udføre opgaven sekventielt efter modtagelse af ordrebeløbet. Kald calculateTax()-metoden fra CalculationService og videregiv ordrebeløbet.
Note
Bemærk

calculateTax()-metoden anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer en skat svarende til 15% af ordrebeløbet.

3. Efter modtagelse af ordrebeløbet, beregn fragtomkostningerne asynkront ved hjælp af beregningstjenesten:

  • Brug thenCompose() for at udføre opgaven sekventielt efter modtagelse af ordrebeløbet. Kald metoden calculateShipping fra CalculationService og videregiv ordrebeløbet.
Note
Bemærk

Metoden calculateShipping() anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer en fragtomkostning svarende til 10% af ordrebeløbet.

4. Kombiner asynkrone beregninger af skat og fragtomkostninger for at opnå den samlede tillægsomkostning:

  • Brug thenCombine() til at kombinere to CompletableFuture-resultater for skat og fragt for at opnå den samlede tillægsomkostning (skat + fragtomkostning).

5. Kombiner ordrebeløbet og den samlede tillægsomkostning for at opnå det samlede ordrebeløb:

  • Brug thenCombine() til at kombinere de to CompletableFuture-resultater for tillægsomkostning og samlet tillægsomkostning samt samlet ordrebeløb for at opnå det samlede ordrebeløb.

6. Efter beregning af det samlede beløb, udskriv det til konsollen:

  • Brug thenAccept() til at behandle og udskrive resultatet;
  • Når alle beregninger er færdige, udskriv ordre total til konsollen.

For at vise resultatet i konsollen kan du anvende dette mønster:

System.out.println("Final total for " + orderId + ": " + finalTotal);

Hvis du følger alt korrekt, vil du få denne output i konsollen:

Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0

Når du er sikker på, at alt fungerer, skal du køre verifikationstestene på stien /src/test/java/OrderProcessingExampleTest.java.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 3.33

bookUdfordring: Completablefuture

Stryg for at vise menuen

Opgave

Opgaven er at opbygge et system, der håndterer ordrer og udfører yderligere beregninger såsom skat og forsendelsesomkostninger. Du skal behandle flere ordrer asynkront, udføre de nødvendige beregninger og vise det samlede beløb for hver ordre, når alle beregninger er afsluttet.

Hver ordre har en unik identifikator og en pris tilknyttet. (InitMap-klassen)

ID'erne og deres summer gemmes i et Map i InitMap-klassen. Nøglerne i dette Map (som er ordre-ID'erne) er dem, vi gennemløber i processOrders()-metoden.

Hentning af ordredata udføres asynkront og returnerer ordrebeløbet. Dette håndteres af OrderService-klassen, specifikt fetchOrderAmount(String orderId)-metoden.

Skat beregnes som 15% af ordrebeløbet. Dette administreres af CalculationService-klassen ved brug af calculateTax()-metoden.

Forsendelsesomkostninger beregnes som 10% af ordrebeløbet. Dette håndteres også af CalculationService-klassen ved brug af calculateShipping()-metoden.

Note
Bemærk

Din hovedopgave er at implementere logikken trin for trin i pakken task klassen OrderProcessingExample i metoden processOrders().

Implementeringstrin

1. Modtag ordrebeløbet asynkront ved hjælp af ordre-servicen:

  • Opret et CompletableFuture-objekt for at hente ordrebeløbet asynkront;
  • Kald metoden fetchOrderAmount() fra OrderService med order id som parameter.
Note
Bemærk

fetchOrderAmount()-metoden anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer ordrebeløbet ud fra dets id.

2. Efter indhentning af ordrebeløbet, beregn asynkront skat ved hjælp af beregningstjenesten:

  • Brug thenCompose() til at udføre opgaven sekventielt efter modtagelse af ordrebeløbet. Kald calculateTax()-metoden fra CalculationService og videregiv ordrebeløbet.
Note
Bemærk

calculateTax()-metoden anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer en skat svarende til 15% af ordrebeløbet.

3. Efter modtagelse af ordrebeløbet, beregn fragtomkostningerne asynkront ved hjælp af beregningstjenesten:

  • Brug thenCompose() for at udføre opgaven sekventielt efter modtagelse af ordrebeløbet. Kald metoden calculateShipping fra CalculationService og videregiv ordrebeløbet.
Note
Bemærk

Metoden calculateShipping() anvender CompletableFuture.supplyAsync() til at udføre opgaven asynkront og returnerer en fragtomkostning svarende til 10% af ordrebeløbet.

4. Kombiner asynkrone beregninger af skat og fragtomkostninger for at opnå den samlede tillægsomkostning:

  • Brug thenCombine() til at kombinere to CompletableFuture-resultater for skat og fragt for at opnå den samlede tillægsomkostning (skat + fragtomkostning).

5. Kombiner ordrebeløbet og den samlede tillægsomkostning for at opnå det samlede ordrebeløb:

  • Brug thenCombine() til at kombinere de to CompletableFuture-resultater for tillægsomkostning og samlet tillægsomkostning samt samlet ordrebeløb for at opnå det samlede ordrebeløb.

6. Efter beregning af det samlede beløb, udskriv det til konsollen:

  • Brug thenAccept() til at behandle og udskrive resultatet;
  • Når alle beregninger er færdige, udskriv ordre total til konsollen.

For at vise resultatet i konsollen kan du anvende dette mønster:

System.out.println("Final total for " + orderId + ": " + finalTotal);

Hvis du følger alt korrekt, vil du få denne output i konsollen:

Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0

Når du er sikker på, at alt fungerer, skal du køre verifikationstestene på stien /src/test/java/OrderProcessingExampleTest.java.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7
some-alt