Sobes.tech
Back to questions
Junior
3

Опиши решение второй задачи (обработка заказов через Stream API с группировкой по валюте и сортировкой по разнице max-min).

Companies where asked
ИП Ганус Александр Андреевич

Answer from AI

sobes.tech AI

Для решения задачи обработки заказов через Stream API с группировкой по валюте и сортировкой по разнице max-min можно использовать следующий подход на Dart (Flutter):

  1. Имеется поток заказов (Stream<Order>), где каждый заказ содержит сумму и валюту.
  2. Группируем заказы по валюте, собирая суммы в списки.
  3. Для каждой группы вычисляем разницу между максимальной и минимальной суммой.
  4. Сортируем группы по этой разнице.

Пример кода:

class Order {
  final String currency;
  final double amount;
  Order(this.currency, this.amount);
}

void processOrders(Stream<Order> orders) async {
  final Map<String, List<double>> grouped = {};

  await for (var order in orders) {
    grouped.putIfAbsent(order.currency, () => []).add(order.amount);
  }

  final sortedCurrencies = grouped.entries.toList()
    ..sort((a, b) {
      double diffA = a.value.reduce((v, e) => v > e ? v : e) - a.value.reduce((v, e) => v < e ? v : e);
      double diffB = b.value.reduce((v, e) => v > e ? v : e) - b.value.reduce((v, e) => v < e ? v : e);
      return diffB.compareTo(diffA); // сортировка по убыванию
    });

  for (var entry in sortedCurrencies) {
    print('Currency: \\${entry.key}, Difference: \\${entry.value.reduce((v, e) => v > e ? v : e) - entry.value.reduce((v, e) => v < e ? v : e)}');
  }
}

Этот код читает поток заказов, группирует их по валюте, вычисляет разницу между максимальной и минимальной суммой в каждой группе и выводит валюты, отсортированные по этой разнице.