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
Awesome!
Completion rate improved to 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!