Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Utmaning: CompletableFuture | Bästa Praxis För Multitrådning
Quizzes & Challenges
Quizzes
Challenges
/
Multitrådning i Java

bookUtmaning: CompletableFuture

Uppgift

Uppgiften är att bygga ett system som hanterar beställningar och utför ytterligare beräkningar såsom skatt och fraktkostnader. Du behöver behandla flera beställningar asynkront, utföra de nödvändiga beräkningarna och visa det totala beloppet för varje beställning när alla beräkningar är klara.

Varje beställning har en unik identifierare och ett pris kopplat till sig. (InitMap class)

ID och deras summor lagras i en Map i klassen InitMap. Nycklarna i denna Map (vilka är beställnings-ID) är de som vi itererar över i metoden processOrders().

Hämtning av beställningsdata sker asynkront och returnerar beställningsbeloppet. Detta hanteras av klassen OrderService, specifikt metoden fetchOrderAmount(String orderId).

Skatt beräknas som 15 % av beställningsbeloppet. Detta hanteras av klassen CalculationService med hjälp av metoden calculateTax().

Fraktkostnaden beräknas som 10 % av beställningsbeloppet. Detta hanteras också av klassen CalculationService med hjälp av metoden calculateShipping().

Note
Notering

Din huvuduppgift är att stegvis implementera logiken i paketet task klassen OrderProcessingExample i metoden processOrders().

Implementeringssteg

1. Ta emot orderbeloppet asynkront med hjälp av ordertjänsten:

  • Skapa ett CompletableFuture-objekt för att hämta orderbeloppet asynkront;
  • Anropa metoden fetchOrderAmount() från OrderService och skicka med order id.
Note
Notering

Metoden fetchOrderAmount() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar orderbeloppet baserat på dess id.

2. Efter att ha hämtat orderbeloppet, beräkna asynkront skatten med hjälp av beräkningstjänsten:

  • Använd thenCompose() för att utföra uppgiften sekventiellt efter att ha erhållit orderbeloppet. Anropa metoden calculateTax() från CalculationService och skicka med orderbeloppet.
Note
Notering

Metoden calculateTax() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar en skatt som motsvarar 15 % av orderbeloppet.

3. Efter att ha mottagit orderbeloppet, beräkna fraktkostnaden asynkront med hjälp av calculate-tjänsten:

  • Använd thenCompose() för att utföra uppgiften sekventiellt efter att orderbeloppet mottagits. Anropa metoden calculateShipping från CalculationService och skicka med orderbeloppet.
Note
Notering

Metoden calculateShipping() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar en fraktkostnad som motsvarar 10% av orderbeloppet.

4. Kombinera asynkrona beräkningar av skatt och fraktkostnad för att få den totala tillkommande kostnaden:

  • Använd thenCombine() för att kombinera två CompletableFuture-resultat av skatt och frakt för att få den totala tillkommande kostnaden (skatt + fraktkostnad).

5. Kombinera orderbeloppet och den totala tillkommande kostnaden för att få det totala orderbeloppet:

  • Använd thenCombine() för att kombinera de två CompletableFuture-resultaten av tillkommande kostnad och totalt orderbelopp för att få det totala orderbeloppet.

6. Efter att ha beräknat totalen, skriv ut den till konsolen:

  • Använd thenAccept() för att bearbeta och skriva ut resultatet;
  • Efter att alla beräkningar är klara, skriv ut ordertotalen till konsolen.

För att skriva ut resultatet till konsolen kan du använda detta mönster:

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

Om du följer allt korrekt kommer du få detta utdata till konsolen:

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

När du är säker på att allt fungerar, kör verifieringstesterna på sökvägen /src/test/java/OrderProcessingExampleTest.java.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 3.33

bookUtmaning: CompletableFuture

Svep för att visa menyn

Uppgift

Uppgiften är att bygga ett system som hanterar beställningar och utför ytterligare beräkningar såsom skatt och fraktkostnader. Du behöver behandla flera beställningar asynkront, utföra de nödvändiga beräkningarna och visa det totala beloppet för varje beställning när alla beräkningar är klara.

Varje beställning har en unik identifierare och ett pris kopplat till sig. (InitMap class)

ID och deras summor lagras i en Map i klassen InitMap. Nycklarna i denna Map (vilka är beställnings-ID) är de som vi itererar över i metoden processOrders().

Hämtning av beställningsdata sker asynkront och returnerar beställningsbeloppet. Detta hanteras av klassen OrderService, specifikt metoden fetchOrderAmount(String orderId).

Skatt beräknas som 15 % av beställningsbeloppet. Detta hanteras av klassen CalculationService med hjälp av metoden calculateTax().

Fraktkostnaden beräknas som 10 % av beställningsbeloppet. Detta hanteras också av klassen CalculationService med hjälp av metoden calculateShipping().

Note
Notering

Din huvuduppgift är att stegvis implementera logiken i paketet task klassen OrderProcessingExample i metoden processOrders().

Implementeringssteg

1. Ta emot orderbeloppet asynkront med hjälp av ordertjänsten:

  • Skapa ett CompletableFuture-objekt för att hämta orderbeloppet asynkront;
  • Anropa metoden fetchOrderAmount() från OrderService och skicka med order id.
Note
Notering

Metoden fetchOrderAmount() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar orderbeloppet baserat på dess id.

2. Efter att ha hämtat orderbeloppet, beräkna asynkront skatten med hjälp av beräkningstjänsten:

  • Använd thenCompose() för att utföra uppgiften sekventiellt efter att ha erhållit orderbeloppet. Anropa metoden calculateTax() från CalculationService och skicka med orderbeloppet.
Note
Notering

Metoden calculateTax() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar en skatt som motsvarar 15 % av orderbeloppet.

3. Efter att ha mottagit orderbeloppet, beräkna fraktkostnaden asynkront med hjälp av calculate-tjänsten:

  • Använd thenCompose() för att utföra uppgiften sekventiellt efter att orderbeloppet mottagits. Anropa metoden calculateShipping från CalculationService och skicka med orderbeloppet.
Note
Notering

Metoden calculateShipping() använder CompletableFuture.supplyAsync() för att utföra uppgiften asynkront och returnerar en fraktkostnad som motsvarar 10% av orderbeloppet.

4. Kombinera asynkrona beräkningar av skatt och fraktkostnad för att få den totala tillkommande kostnaden:

  • Använd thenCombine() för att kombinera två CompletableFuture-resultat av skatt och frakt för att få den totala tillkommande kostnaden (skatt + fraktkostnad).

5. Kombinera orderbeloppet och den totala tillkommande kostnaden för att få det totala orderbeloppet:

  • Använd thenCombine() för att kombinera de två CompletableFuture-resultaten av tillkommande kostnad och totalt orderbelopp för att få det totala orderbeloppet.

6. Efter att ha beräknat totalen, skriv ut den till konsolen:

  • Använd thenAccept() för att bearbeta och skriva ut resultatet;
  • Efter att alla beräkningar är klara, skriv ut ordertotalen till konsolen.

För att skriva ut resultatet till konsolen kan du använda detta mönster:

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

Om du följer allt korrekt kommer du få detta utdata till konsolen:

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

När du är säker på att allt fungerar, kör verifieringstesterna på sökvägen /src/test/java/OrderProcessingExampleTest.java.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 7
some-alt