Middle+
162
Հաշվեք յուրաքանչյուր արժույթի համար DELIVERY տեսակի ամենամեծ և ամենափոքր պատվերի տարբերությունը։ Վերադարձեք արդյունքը յուրաքանչյուր արժույթին։ Արժույթները պետք է դասավորված լինեն աճման կարգով այս տարբերության։ /** * Վերադարձնում է քարտեզ՝ {արժույթ (աճման կարգով տարբերության) – DELIVERY տեսակի ամենամեծ և ամենափոքր պատվերի տարբերությունը}։ * Եթե որոշ արժույթների համար կա միայն մեկ պատվեր, ապա այն համարվում է և ամենամեծ և ամենափոքր, և տարբերությունը հավասար է 0–ի։ * Մուտքային տվյալների օրինակ՝ * [ * 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) * ] * * Ապահովված արդյունք՝ * ["EUR" -> 0.0, "USD" -> 20.0, "RUB" -> 100.0] * */ Map<String, Double> getMaxMinusMinDeliveryMapByCurrency(List<OrderData> orderDataList) { }
Ընկերությունները, որտեղ հարցրել են
Мираполис
Պատասխան AI-ից
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, что соответствует условию.