Utfordring: CompletableFuture
Oppgave
Oppgaven er å bygge et system som håndterer ordre og utfører tilleggsberegninger som skatt og fraktkostnader. Det kreves å behandle flere ordre asynkront, utføre de nødvendige beregningene, og vise totalbeløpet for hver ordre når alle beregninger er fullført.
Hver ordre har en unik identifikator og en pris tilknyttet. (InitMap-klassen)
ID-ene og deres summer lagres i en Map i InitMap klassen. Nøklene i denne Map (som er ordre-ID) er de som det itereres over i processOrders()-metoden.
Henting av ordredato skjer asynkront og returnerer ordrebeløpet. Dette håndteres av OrderService-klassen, spesielt metoden fetchOrderAmount(String orderId).
Skatt beregnes som 15 % av ordrebeløpet. Dette håndteres av CalculationService-klassen ved bruk av metoden calculateTax().
Fraktkostnad beregnes som 10 % av ordrebeløpet. Dette håndteres også av CalculationService-klassen ved bruk av metoden calculateShipping().
Din hovedoppgave er å implementere logikken steg for steg i pakken task klassen OrderProcessingExample i metoden processOrders().
Implementeringstrinn
1. Motta ordrebeløpet asynkront ved å bruke ordre-tjenesten:
- Opprett et
CompletableFuture-objekt for å hente ordrebeløpet asynkront; - Kall metoden
fetchOrderAmount()fraOrderServiceog send inn order id.
Metoden fetchOrderAmount() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer ordrebeløpet basert på id.
2. Etter å ha hentet ordrebeløpet, beregn skatt asynkront ved å bruke kalkulasjonstjenesten:
- Bruk
thenCompose()for å utføre oppgaven sekvensielt etter å ha mottatt ordrebeløpet. Kall metodencalculateTax()fraCalculationServiceog send inn ordrebeløpet.
Metoden calculateTax() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer en skatt lik 15 % av ordrebeløpet.
3. Etter å ha mottatt ordrebeløpet, beregn fraktkostnaden asynkront ved å bruke beregningstjenesten:
- Bruk
thenCompose()for å utføre oppgaven sekvensielt etter at ordrebeløpet er mottatt. Kall metodencalculateShippingfraCalculationServiceog send inn ordrebeløpet.
Metoden calculateShipping() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer en fraktkostnad lik 10 % av ordrebeløpet.
4. Kombiner asynkrone beregninger av skatt og fraktkostnad for å få den totale tilleggskostnaden:
- Bruk
thenCombine()for å kombinere toCompletableFuture-resultater for skatt og frakt for å få den totale tilleggskostnaden (skatt + fraktkostnad).
5. Kombiner ordrebeløpet og den totale tilleggskostnaden for å få det totale ordrebeløpet:
- Bruk
thenCombine()for å kombinere de toCompletableFuture-resultatene for tilleggskostnad og totalt ordrebeløp for å få det totale ordrebeløpet.
6. Etter å ha beregnet totalen, skriv den ut til konsollen:
- Bruk
thenAccept()for å behandle og skrive ut resultatet; - Etter at alle beregninger er fullført, skriv ut ordretotalen til konsollen.
For å skrive ut resultatet til konsollen, kan du bruke dette mønsteret:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Hvis du følger alt korrekt, vil du få denne utdataen til 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, kjør verifikasjonstestene på banen /src/test/java/OrderProcessingExampleTest.java.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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?
Fantastisk!
Completion rate forbedret til 3.33
Utfordring: CompletableFuture
Sveip for å vise menyen
Oppgave
Oppgaven er å bygge et system som håndterer ordre og utfører tilleggsberegninger som skatt og fraktkostnader. Det kreves å behandle flere ordre asynkront, utføre de nødvendige beregningene, og vise totalbeløpet for hver ordre når alle beregninger er fullført.
Hver ordre har en unik identifikator og en pris tilknyttet. (InitMap-klassen)
ID-ene og deres summer lagres i en Map i InitMap klassen. Nøklene i denne Map (som er ordre-ID) er de som det itereres over i processOrders()-metoden.
Henting av ordredato skjer asynkront og returnerer ordrebeløpet. Dette håndteres av OrderService-klassen, spesielt metoden fetchOrderAmount(String orderId).
Skatt beregnes som 15 % av ordrebeløpet. Dette håndteres av CalculationService-klassen ved bruk av metoden calculateTax().
Fraktkostnad beregnes som 10 % av ordrebeløpet. Dette håndteres også av CalculationService-klassen ved bruk av metoden calculateShipping().
Din hovedoppgave er å implementere logikken steg for steg i pakken task klassen OrderProcessingExample i metoden processOrders().
Implementeringstrinn
1. Motta ordrebeløpet asynkront ved å bruke ordre-tjenesten:
- Opprett et
CompletableFuture-objekt for å hente ordrebeløpet asynkront; - Kall metoden
fetchOrderAmount()fraOrderServiceog send inn order id.
Metoden fetchOrderAmount() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer ordrebeløpet basert på id.
2. Etter å ha hentet ordrebeløpet, beregn skatt asynkront ved å bruke kalkulasjonstjenesten:
- Bruk
thenCompose()for å utføre oppgaven sekvensielt etter å ha mottatt ordrebeløpet. Kall metodencalculateTax()fraCalculationServiceog send inn ordrebeløpet.
Metoden calculateTax() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer en skatt lik 15 % av ordrebeløpet.
3. Etter å ha mottatt ordrebeløpet, beregn fraktkostnaden asynkront ved å bruke beregningstjenesten:
- Bruk
thenCompose()for å utføre oppgaven sekvensielt etter at ordrebeløpet er mottatt. Kall metodencalculateShippingfraCalculationServiceog send inn ordrebeløpet.
Metoden calculateShipping() bruker CompletableFuture.supplyAsync() for å utføre oppgaven asynkront og returnerer en fraktkostnad lik 10 % av ordrebeløpet.
4. Kombiner asynkrone beregninger av skatt og fraktkostnad for å få den totale tilleggskostnaden:
- Bruk
thenCombine()for å kombinere toCompletableFuture-resultater for skatt og frakt for å få den totale tilleggskostnaden (skatt + fraktkostnad).
5. Kombiner ordrebeløpet og den totale tilleggskostnaden for å få det totale ordrebeløpet:
- Bruk
thenCombine()for å kombinere de toCompletableFuture-resultatene for tilleggskostnad og totalt ordrebeløp for å få det totale ordrebeløpet.
6. Etter å ha beregnet totalen, skriv den ut til konsollen:
- Bruk
thenAccept()for å behandle og skrive ut resultatet; - Etter at alle beregninger er fullført, skriv ut ordretotalen til konsollen.
For å skrive ut resultatet til konsollen, kan du bruke dette mønsteret:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Hvis du følger alt korrekt, vil du få denne utdataen til 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, kjør verifikasjonstestene på banen /src/test/java/OrderProcessingExampleTest.java.
Takk for tilbakemeldingene dine!