Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Utfordring: CompletableFuture | Beste Praksiser for Multitråding
Multitråding i Java

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

Note
Merk

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() fra OrderService og send inn order id.
Note
Merk

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 metoden calculateTax() fra CalculationService og send inn ordrebeløpet.
Note
Merk

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 metoden calculateShipping fra CalculationService og send inn ordrebeløpet.
Note
Merk

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

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

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

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

Note
Merk

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() fra OrderService og send inn order id.
Note
Merk

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 metoden calculateTax() fra CalculationService og send inn ordrebeløpet.
Note
Merk

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 metoden calculateShipping fra CalculationService og send inn ordrebeløpet.
Note
Merk

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

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7
some-alt