Udfordring: 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.
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()fraOrderServicemed order id som parameter.
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. KaldcalculateTax()-metoden fraCalculationServiceog videregiv ordrebeløbet.
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 metodencalculateShippingfraCalculationServiceog videregiv ordrebeløbet.
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 toCompletableFuture-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 toCompletableFuture-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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
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
Udfordring: 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.
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()fraOrderServicemed order id som parameter.
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. KaldcalculateTax()-metoden fraCalculationServiceog videregiv ordrebeløbet.
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 metodencalculateShippingfraCalculationServiceog videregiv ordrebeløbet.
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 toCompletableFuture-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 toCompletableFuture-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.
Tak for dine kommentarer!