Завдання: CompletableFuture
Завдання
Ваше завдання — створити систему, яка обробляє замовлення та виконує додаткові розрахунки, такі як податок і вартість доставки. Необхідно обробляти кілька замовлень асинхронно, виконувати потрібні розрахунки та відображати загальну суму для кожного замовлення після завершення всіх розрахунків.
Кожне замовлення має унікальний ідентифікатор та вартість. (клас InitMap)
ID та їх суми зберігаються у Map у класі InitMap. Ключі цієї Map (які є ID замовлень) використовуються для ітерації у методі processOrders().
Отримання даних про замовлення виконується асинхронно і повертає суму замовлення. Це реалізовано у класі OrderService, зокрема у методі fetchOrderAmount(String orderId).
Податок розраховується як 15% від суми замовлення. Це виконується у класі CalculationService за допомогою методу calculateTax().
Вартість доставки розраховується як 10% від суми замовлення. Це також виконується у класі CalculationService за допомогою методу calculateShipping().
Ваше основне завдання — поетапно реалізувати логіку у пакеті task, класі OrderProcessingExample, у методі processOrders().
Кроки реалізації
1. Отримання суми замовлення асинхронно за допомогою сервісу замовлень:
- Створити об'єкт
CompletableFutureдля отримання суми замовлення асинхронно; - Викликати метод
fetchOrderAmount()зOrderService, передавши order id.
Метод fetchOrderAmount() використовує CompletableFuture.supplyAsync() для асинхронного виконання завдання та повертає суму замовлення за його ідентифікатором.
2. Після отримання суми замовлення асинхронно обчислити податок за допомогою сервісу обчислень:
- Використати
thenCompose()для послідовного виконання завдання після отримання суми замовлення. Викликати методcalculateTax()зCalculationService, передавши суму замовлення.
Метод calculateTax() використовує CompletableFuture.supplyAsync() для асинхронного виконання завдання та повертає податок, що дорівнює 15% від суми замовлення.
3. Після отримання суми замовлення асинхронно обчислити вартість доставки за допомогою сервісу обчислень:
- Використати
thenCompose(), щоб виконати задачу послідовно після отримання суми замовлення. Викликати методcalculateShippingз класуCalculationService, передавши суму замовлення.
Метод calculateShipping() використовує CompletableFuture.supplyAsync() для асинхронного виконання задачі та повертає вартість доставки, що дорівнює 10% від суми замовлення.
4. Об'єднати асинхронні обчислення податку та вартості доставки для отримання загальної додаткової вартості:
- Використати
thenCombine()для об'єднання двох результатівCompletableFutureподатку та доставки з метою отримання загальної додаткової вартості (податок + вартість доставки).
5. Об'єднати суму замовлення та загальну додаткову вартість для отримання загальної суми замовлення:
- Використати
thenCombine()для об'єднання двох результатівCompletableFutureдодаткової вартості та загальної додаткової вартості й загальної суми замовлення для отримання загальної суми замовлення.
6. Після обчислення загальної суми вивести її у консоль:
- Використати
thenAccept()для обробки та виведення результату; - Після завершення всіх обчислень вивести загальну суму замовлення у консоль.
Щоб вивести результат у консоль, використовуйте цей шаблон:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Якщо ви все зробили правильно, у консолі отримаєте такий результат:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Після того як переконаєтеся, що все працює, запустіть перевірочні тести за шляхом /src/test/java/OrderProcessingExampleTest.java.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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
Завдання: CompletableFuture
Свайпніть щоб показати меню
Завдання
Ваше завдання — створити систему, яка обробляє замовлення та виконує додаткові розрахунки, такі як податок і вартість доставки. Необхідно обробляти кілька замовлень асинхронно, виконувати потрібні розрахунки та відображати загальну суму для кожного замовлення після завершення всіх розрахунків.
Кожне замовлення має унікальний ідентифікатор та вартість. (клас InitMap)
ID та їх суми зберігаються у Map у класі InitMap. Ключі цієї Map (які є ID замовлень) використовуються для ітерації у методі processOrders().
Отримання даних про замовлення виконується асинхронно і повертає суму замовлення. Це реалізовано у класі OrderService, зокрема у методі fetchOrderAmount(String orderId).
Податок розраховується як 15% від суми замовлення. Це виконується у класі CalculationService за допомогою методу calculateTax().
Вартість доставки розраховується як 10% від суми замовлення. Це також виконується у класі CalculationService за допомогою методу calculateShipping().
Ваше основне завдання — поетапно реалізувати логіку у пакеті task, класі OrderProcessingExample, у методі processOrders().
Кроки реалізації
1. Отримання суми замовлення асинхронно за допомогою сервісу замовлень:
- Створити об'єкт
CompletableFutureдля отримання суми замовлення асинхронно; - Викликати метод
fetchOrderAmount()зOrderService, передавши order id.
Метод fetchOrderAmount() використовує CompletableFuture.supplyAsync() для асинхронного виконання завдання та повертає суму замовлення за його ідентифікатором.
2. Після отримання суми замовлення асинхронно обчислити податок за допомогою сервісу обчислень:
- Використати
thenCompose()для послідовного виконання завдання після отримання суми замовлення. Викликати методcalculateTax()зCalculationService, передавши суму замовлення.
Метод calculateTax() використовує CompletableFuture.supplyAsync() для асинхронного виконання завдання та повертає податок, що дорівнює 15% від суми замовлення.
3. Після отримання суми замовлення асинхронно обчислити вартість доставки за допомогою сервісу обчислень:
- Використати
thenCompose(), щоб виконати задачу послідовно після отримання суми замовлення. Викликати методcalculateShippingз класуCalculationService, передавши суму замовлення.
Метод calculateShipping() використовує CompletableFuture.supplyAsync() для асинхронного виконання задачі та повертає вартість доставки, що дорівнює 10% від суми замовлення.
4. Об'єднати асинхронні обчислення податку та вартості доставки для отримання загальної додаткової вартості:
- Використати
thenCombine()для об'єднання двох результатівCompletableFutureподатку та доставки з метою отримання загальної додаткової вартості (податок + вартість доставки).
5. Об'єднати суму замовлення та загальну додаткову вартість для отримання загальної суми замовлення:
- Використати
thenCombine()для об'єднання двох результатівCompletableFutureдодаткової вартості та загальної додаткової вартості й загальної суми замовлення для отримання загальної суми замовлення.
6. Після обчислення загальної суми вивести її у консоль:
- Використати
thenAccept()для обробки та виведення результату; - Після завершення всіх обчислень вивести загальну суму замовлення у консоль.
Щоб вивести результат у консоль, використовуйте цей шаблон:
System.out.println("Final total for " + orderId + ": " + finalTotal);
Якщо ви все зробили правильно, у консолі отримаєте такий результат:
Final total for order2: 150.0
Final total for order1: 375.0
Final total for order3: 225.0
Після того як переконаєтеся, що все працює, запустіть перевірочні тести за шляхом /src/test/java/OrderProcessingExampleTest.java.
Дякуємо за ваш відгук!