Herausforderung: CompletableFuture
Aufgabe
Ziel ist der Aufbau eines Systems zur Bearbeitung von Bestellungen und zur Durchführung zusätzlicher Berechnungen wie Steuern und Versandkosten. Erforderlich ist die asynchrone Verarbeitung mehrerer Bestellungen, die Durchführung der notwendigen Berechnungen sowie die Anzeige des Gesamtbetrags für jede Bestellung, sobald alle Berechnungen abgeschlossen sind.
Jede Bestellung verfügt über eine eindeutige Kennung und einen zugehörigen Preis. (InitMap-Klasse)
Die ID und deren Summen werden in einer Map innerhalb der Klasse InitMap gespeichert. Die Schlüssel dieser Map (die Bestell-ID) werden in der Methode processOrders() durchlaufen.
Das Abrufen der Bestelldaten erfolgt asynchron und liefert den Bestellbetrag zurück. Dies wird von der Klasse OrderService übernommen, insbesondere von der Methode fetchOrderAmount(String orderId).
Steuer wird als 15 % des Bestellbetrags berechnet. Dies wird von der Klasse CalculationService mit der Methode calculateTax() durchgeführt.
Die Versandkosten werden als 10 % des Bestellbetrags berechnet. Auch dies übernimmt die Klasse CalculationService mit der Methode calculateShipping().
Die Hauptaufgabe besteht darin, die Logik schrittweise im Package task in der Klasse OrderProcessingExample in der Methode processOrders() zu implementieren.
Implementierungsschritte
1. Den Bestellbetrag asynchron mit dem Order Service abrufen:
- Ein
CompletableFuture-Objekt erstellen, um den Bestellbetrag asynchron abzurufen; - Die Methode
fetchOrderAmount()ausOrderServicemit der Bestell-ID aufrufen.
Die Methode fetchOrderAmount() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt den Bestellbetrag anhand der ID zurück.
2. Nach dem Abrufen des Bestellbetrags asynchrone Berechnung der Steuer mit dem Berechnungsdienst:
- Verwendung von
thenCompose(), um die Aufgabe nach dem Erhalt des Bestellbetrags sequentiell auszuführen. Aufruf der MethodecalculateTax()aus demCalculationServiceunter Übergabe des Bestellbetrags.
Die Methode calculateTax() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt eine Steuer in Höhe von 15% des Bestellbetrags zurück.
3. Nach Erhalt des Bestellbetrags die Versandkosten asynchron mit dem Berechnungsservice berechnen:
- Verwenden von
thenCompose(), um die Aufgabe nach Erhalt des Bestellbetrags sequenziell auszuführen. Die MethodecalculateShippingausCalculationServicemit dem Bestellbetrag aufrufen.
Die Methode calculateShipping() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt Versandkosten zurück, die 10 % des Bestellbetrags entsprechen.
4. Asynchrone Berechnung von Steuer und Versandkosten kombinieren, um die gesamten Zusatzkosten zu erhalten:
- Verwenden von
thenCombine(), um zweiCompletableFuture-Ergebnisse von Steuer und Versandkosten zu kombinieren und die gesamten Zusatzkosten (Steuer + Versandkosten) zu berechnen.
5. Bestellbetrag und Gesamtkosten kombinieren, um den Gesamtbestellwert zu erhalten:
- Verwenden von
thenCombine(), um die beidenCompletableFuture-Ergebnisse von Zusatzkosten und Gesamtbestellwert zu kombinieren und so den Gesamtbestellwert zu berechnen.
6. Nach der Berechnung des Gesamtbetrags diesen in der Konsole ausgeben:
- Verwenden von
thenAccept(), um das Ergebnis zu verarbeiten und auszugeben; - Nach Abschluss aller Berechnungen den Gesamtbestellwert in der Konsole ausgeben.
Um das Ergebnis auszugeben, kann folgendes Muster verwendet werden:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Wenn alle Schritte korrekt ausgeführt wurden, erscheint folgende Ausgabe in der Konsole:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Sobald sichergestellt ist, dass alles funktioniert, die Überprüfungstests im Pfad /src/test/java/OrderProcessingExampleTest.java ausführen.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
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?
Awesome!
Completion rate improved to 3.33
Herausforderung: CompletableFuture
Swipe um das Menü anzuzeigen
Aufgabe
Ziel ist der Aufbau eines Systems zur Bearbeitung von Bestellungen und zur Durchführung zusätzlicher Berechnungen wie Steuern und Versandkosten. Erforderlich ist die asynchrone Verarbeitung mehrerer Bestellungen, die Durchführung der notwendigen Berechnungen sowie die Anzeige des Gesamtbetrags für jede Bestellung, sobald alle Berechnungen abgeschlossen sind.
Jede Bestellung verfügt über eine eindeutige Kennung und einen zugehörigen Preis. (InitMap-Klasse)
Die ID und deren Summen werden in einer Map innerhalb der Klasse InitMap gespeichert. Die Schlüssel dieser Map (die Bestell-ID) werden in der Methode processOrders() durchlaufen.
Das Abrufen der Bestelldaten erfolgt asynchron und liefert den Bestellbetrag zurück. Dies wird von der Klasse OrderService übernommen, insbesondere von der Methode fetchOrderAmount(String orderId).
Steuer wird als 15 % des Bestellbetrags berechnet. Dies wird von der Klasse CalculationService mit der Methode calculateTax() durchgeführt.
Die Versandkosten werden als 10 % des Bestellbetrags berechnet. Auch dies übernimmt die Klasse CalculationService mit der Methode calculateShipping().
Die Hauptaufgabe besteht darin, die Logik schrittweise im Package task in der Klasse OrderProcessingExample in der Methode processOrders() zu implementieren.
Implementierungsschritte
1. Den Bestellbetrag asynchron mit dem Order Service abrufen:
- Ein
CompletableFuture-Objekt erstellen, um den Bestellbetrag asynchron abzurufen; - Die Methode
fetchOrderAmount()ausOrderServicemit der Bestell-ID aufrufen.
Die Methode fetchOrderAmount() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt den Bestellbetrag anhand der ID zurück.
2. Nach dem Abrufen des Bestellbetrags asynchrone Berechnung der Steuer mit dem Berechnungsdienst:
- Verwendung von
thenCompose(), um die Aufgabe nach dem Erhalt des Bestellbetrags sequentiell auszuführen. Aufruf der MethodecalculateTax()aus demCalculationServiceunter Übergabe des Bestellbetrags.
Die Methode calculateTax() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt eine Steuer in Höhe von 15% des Bestellbetrags zurück.
3. Nach Erhalt des Bestellbetrags die Versandkosten asynchron mit dem Berechnungsservice berechnen:
- Verwenden von
thenCompose(), um die Aufgabe nach Erhalt des Bestellbetrags sequenziell auszuführen. Die MethodecalculateShippingausCalculationServicemit dem Bestellbetrag aufrufen.
Die Methode calculateShipping() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt Versandkosten zurück, die 10 % des Bestellbetrags entsprechen.
4. Asynchrone Berechnung von Steuer und Versandkosten kombinieren, um die gesamten Zusatzkosten zu erhalten:
- Verwenden von
thenCombine(), um zweiCompletableFuture-Ergebnisse von Steuer und Versandkosten zu kombinieren und die gesamten Zusatzkosten (Steuer + Versandkosten) zu berechnen.
5. Bestellbetrag und Gesamtkosten kombinieren, um den Gesamtbestellwert zu erhalten:
- Verwenden von
thenCombine(), um die beidenCompletableFuture-Ergebnisse von Zusatzkosten und Gesamtbestellwert zu kombinieren und so den Gesamtbestellwert zu berechnen.
6. Nach der Berechnung des Gesamtbetrags diesen in der Konsole ausgeben:
- Verwenden von
thenAccept(), um das Ergebnis zu verarbeiten und auszugeben; - Nach Abschluss aller Berechnungen den Gesamtbestellwert in der Konsole ausgeben.
Um das Ergebnis auszugeben, kann folgendes Muster verwendet werden:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Wenn alle Schritte korrekt ausgeführt wurden, erscheint folgende Ausgabe in der Konsole:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Sobald sichergestellt ist, dass alles funktioniert, die Überprüfungstests im Pfad /src/test/java/OrderProcessingExampleTest.java ausführen.
Danke für Ihr Feedback!