Middle+
169
2. Har bir valyuta uchun DELIVERY turidagi eng katta va eng kichik buyurtmalar orasidagi farqni hisoblang. Har bir valyuta uchun natijani qaytaring. Natijadagi valyutalar bu farqning o'sish tartibida bo'lishi kerak. /** * {valyuta (o'sish tartibida) – DELIVERY turidagi eng katta va eng kichik buyurtmalar orasidagi farq} shaklida xaritani qaytaradi. * Agar bir valyuta uchun faqat bitta buyurtma bo'lsa, u ham eng katta, ham eng kichik bo'lib, farq 0 bo'ladi. * Kirish ma'lumotlari misoli: * [ * Order(DELIVERY, "EUR", 2000), * Order(DELIVERY, "USD", 15), * Order(DELIVERY, "RUB", 200), * Order (PICKUP, "RUB", 1250), * Order (DELIVERY, "USD", 35), * Order (PICKUP, "USD", 55), * Order (DELIVERY, "RUB", 100) * ] * * Kutilyotgan natija: * ["EUR" -> 0.0, "USD" -> 20.0, "RUB" -> 100.0] * */ Map<String, Double> getMaxMinusMinDeliveryMapByCurrency(List<OrderData> orderDataList) { }
Qaerda so'ralgan kompaniyalar
Мираполис
AIdan javob
sobes.tech AI
Ниже приведена реализация метода на Java, который для списка заказов типа DELIVERY вычисляет для каждой валюты разницу между максимальным и минимальным значением заказа, а затем возвращает результат в виде отсортированной по возрастанию разницы Map:
Map<String, Double> getMaxMinusMinDeliveryMapByCurrency(List<OrderData> orderDataList) {
Map<String, MinMax> statsByCurrency = new HashMap<>();
for (OrderData order : orderDataList) {
if (order == null || order.getType() != Type.DELIVERY) {
continue;
}
String currency = order.getCurrency();
long amount = order.getAmount();
statsByCurrency.compute(currency, (key, current) -> {
if (current == null) {
return new MinMax(amount);
} else {
current.update(amount);
return current;
}
});
}
// Преобразуем в список для сортировки
List<Map.Entry<String, Double>> diffList = statsByCurrency.entrySet().stream()
.map(e -> Map.entry(e.getKey(), e.getValue().diff()))
.sorted(Comparator.comparingDouble(Map.Entry::getValue))
.toList();
// Создаем LinkedHashMap для сохранения порядка
Map<String, Double> result = new LinkedHashMap<>();
for (Map.Entry<String, Double> entry : diffList) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
Этот код:
- Фильтрует заказы по типу DELIVERY.
- Для каждой валюты хранит минимальное и максимальное значение заказа.
- Вычисляет разницу max - min.
- Сортирует валюты по возрастанию этой разницы.
- Возвращает отсортированную Map с валютами и соответствующими разницами.
Если по валюте только один заказ, разница будет 0, что соответствует условию.