Sobes.tech
Middle+
178

2. Her bir para birimi için DELIVERY türündeki en büyük ve en küçük siparişler arasındaki farkı hesaplayın. Her para birimi için sonucu döndürün. Sonuçtaki para birimleri, bu farkın artan sırasına göre sıralanmalıdır. /** * {para birimi (artış sırasına göre) – DELIVERY türündeki en büyük ve en küçük siparişler arasındaki fark} şeklinde bir harita döndürür. * Bir para birimi için sadece bir sipariş varsa, o hem en büyük hem de en küçük sipariş olur ve fark 0 olur. * Giriş verileri örneği: * [ * 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) * ] * * Beklenen sonuç: * ["EUR" -> 0.0, "USD" -> 20.0, "RUB" -> 100.0] * */ Map<String, Double> getMaxMinusMinDeliveryMapByCurrency(List<OrderData> orderDataList) { }

Sorulan şirketler
Мираполис

AI'dan gelen yanıt

sobes.tech yapay zeka

Ниже приведена реализация метода на 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, что соответствует условию.