Sobes.tech
Middle+
171

გთხოვთ, გამოითვალეთ თითოეული ვალუტისთვის 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, что соответствует условию.