Sfida: CompletableFuture
Compito
Il compito consiste nel costruire un sistema che gestisca gli ordini ed esegua calcoli aggiuntivi come tasse e costi di spedizione. È necessario elaborare più ordini in modo asincrono, effettuare i calcoli necessari e visualizzare l'importo totale per ciascun ordine una volta che tutti i calcoli sono stati completati.
Ogni ordine ha un identificatore univoco e un prezzo associato. (Classe InitMap)
L'ID e le relative somme sono memorizzati in una Map all'interno della classe InitMap. Le chiavi di questa Map (che rappresentano gli ID degli ordini) sono quelle su cui si itera nel metodo processOrders().
Il recupero dei dati dell'ordine avviene in modo asincrono e restituisce l'importo dell'ordine. Questo è gestito dalla classe OrderService, in particolare dal metodo fetchOrderAmount(String orderId).
La tassa viene calcolata come 15% dell'importo dell'ordine. Questo è gestito dalla classe CalculationService, utilizzando il metodo calculateTax().
Il costo di spedizione viene calcolato come 10% dell'importo dell'ordine. Anche questo è gestito dalla classe CalculationService, utilizzando il metodo calculateShipping().
Il compito principale consiste nell'implementare la logica passo dopo passo nel package task, classe OrderProcessingExample, nel metodo processOrders().
Passaggi di implementazione
1. Ricezione asincrona dell'importo dell'ordine tramite il servizio ordini:
- Creazione di un oggetto
CompletableFutureper recuperare l'importo dell'ordine in modo asincrono; - Chiamata al metodo
fetchOrderAmount()diOrderServicepassando l'order id.
Il metodo fetchOrderAmount() utilizza CompletableFuture.supplyAsync() per eseguire il compito in modo asincrono e restituisce l'importo dell'ordine, tramite il suo id.
2. Dopo aver recuperato l'importo dell'ordine, calcolare asincronamente la tassa utilizzando il servizio di calcolo:
- Utilizzare
thenCompose()per eseguire il compito in modo sequenziale dopo aver ottenuto l'importo dell'ordine. Chiamare il metodocalculateTax()diCalculationServicepassando l'importo dell'ordine.
Il metodo calculateTax() utilizza CompletableFuture.supplyAsync() per eseguire il compito in modo asincrono e restituisce una tassa pari al 15% dell'importo dell'ordine.
3. Dopo aver ricevuto l'importo dell'ordine, calcolare asincronamente il costo di spedizione utilizzando il servizio di calcolo:
- Utilizzare
thenCompose()per eseguire il task in modo sequenziale dopo aver ricevuto l'importo dell'ordine. Chiamare il metodocalculateShippingdella classeCalculationServicepassando l'importo dell'ordine.
Il metodo calculateShipping() utilizza CompletableFuture.supplyAsync() per eseguire il task in modo asincrono e restituisce un costo di spedizione pari al 10% dell'importo dell'ordine.
4. Combinare i calcoli asincroni di tasse e costo di spedizione per ottenere il costo incrementale totale:
- Utilizzare
thenCombine()per combinare i risultati di dueCompletableFuturedi tasse e spedizione per ottenere il costo aggiuntivo totale (tasse + costo di spedizione).
5. Combinare l'importo dell'ordine e il costo aggiuntivo totale per ottenere l'importo totale dell'ordine:
- Utilizzare
thenCombine()per combinare i due risultati diCompletableFuturedi costo aggiuntivo e importo totale per ottenere l'importo totale dell'ordine.
6. Dopo aver calcolato il totale, stamparlo sulla console:
- Utilizzare
thenAccept()per elaborare e stampare il risultato; - Dopo aver completato tutti i calcoli, stampare il totale dell'ordine sulla console.
Per visualizzare il risultato sulla console, è possibile utilizzare questo schema:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Se tutte le operazioni vengono eseguite correttamente, si otterrà questo output sulla console:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Una volta verificato che tutto funzioni, eseguire i test di verifica nel percorso /src/test/java/OrderProcessingExampleTest.java.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.33
Sfida: CompletableFuture
Scorri per mostrare il menu
Compito
Il compito consiste nel costruire un sistema che gestisca gli ordini ed esegua calcoli aggiuntivi come tasse e costi di spedizione. È necessario elaborare più ordini in modo asincrono, effettuare i calcoli necessari e visualizzare l'importo totale per ciascun ordine una volta che tutti i calcoli sono stati completati.
Ogni ordine ha un identificatore univoco e un prezzo associato. (Classe InitMap)
L'ID e le relative somme sono memorizzati in una Map all'interno della classe InitMap. Le chiavi di questa Map (che rappresentano gli ID degli ordini) sono quelle su cui si itera nel metodo processOrders().
Il recupero dei dati dell'ordine avviene in modo asincrono e restituisce l'importo dell'ordine. Questo è gestito dalla classe OrderService, in particolare dal metodo fetchOrderAmount(String orderId).
La tassa viene calcolata come 15% dell'importo dell'ordine. Questo è gestito dalla classe CalculationService, utilizzando il metodo calculateTax().
Il costo di spedizione viene calcolato come 10% dell'importo dell'ordine. Anche questo è gestito dalla classe CalculationService, utilizzando il metodo calculateShipping().
Il compito principale consiste nell'implementare la logica passo dopo passo nel package task, classe OrderProcessingExample, nel metodo processOrders().
Passaggi di implementazione
1. Ricezione asincrona dell'importo dell'ordine tramite il servizio ordini:
- Creazione di un oggetto
CompletableFutureper recuperare l'importo dell'ordine in modo asincrono; - Chiamata al metodo
fetchOrderAmount()diOrderServicepassando l'order id.
Il metodo fetchOrderAmount() utilizza CompletableFuture.supplyAsync() per eseguire il compito in modo asincrono e restituisce l'importo dell'ordine, tramite il suo id.
2. Dopo aver recuperato l'importo dell'ordine, calcolare asincronamente la tassa utilizzando il servizio di calcolo:
- Utilizzare
thenCompose()per eseguire il compito in modo sequenziale dopo aver ottenuto l'importo dell'ordine. Chiamare il metodocalculateTax()diCalculationServicepassando l'importo dell'ordine.
Il metodo calculateTax() utilizza CompletableFuture.supplyAsync() per eseguire il compito in modo asincrono e restituisce una tassa pari al 15% dell'importo dell'ordine.
3. Dopo aver ricevuto l'importo dell'ordine, calcolare asincronamente il costo di spedizione utilizzando il servizio di calcolo:
- Utilizzare
thenCompose()per eseguire il task in modo sequenziale dopo aver ricevuto l'importo dell'ordine. Chiamare il metodocalculateShippingdella classeCalculationServicepassando l'importo dell'ordine.
Il metodo calculateShipping() utilizza CompletableFuture.supplyAsync() per eseguire il task in modo asincrono e restituisce un costo di spedizione pari al 10% dell'importo dell'ordine.
4. Combinare i calcoli asincroni di tasse e costo di spedizione per ottenere il costo incrementale totale:
- Utilizzare
thenCombine()per combinare i risultati di dueCompletableFuturedi tasse e spedizione per ottenere il costo aggiuntivo totale (tasse + costo di spedizione).
5. Combinare l'importo dell'ordine e il costo aggiuntivo totale per ottenere l'importo totale dell'ordine:
- Utilizzare
thenCombine()per combinare i due risultati diCompletableFuturedi costo aggiuntivo e importo totale per ottenere l'importo totale dell'ordine.
6. Dopo aver calcolato il totale, stamparlo sulla console:
- Utilizzare
thenAccept()per elaborare e stampare il risultato; - Dopo aver completato tutti i calcoli, stampare il totale dell'ordine sulla console.
Per visualizzare il risultato sulla console, è possibile utilizzare questo schema:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Se tutte le operazioni vengono eseguite correttamente, si otterrà questo output sulla console:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Una volta verificato che tutto funzioni, eseguire i test di verifica nel percorso /src/test/java/OrderProcessingExampleTest.java.
Grazie per i tuoi commenti!