Найдите среднее значение каждого элемента списка в той же позиции List<List<Double>>

Привет, я хочу найти среднее значение списка двойников и вернуть список двойников, который является средним значением исходного списка. Как я могу сделать это в потоках Java?

List<Double> comupteAverage(List<List<Double>> values)
{
    List<Double> averages=?;
    return averages;
}

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

Вы должны показать, что вы сделали сами

petrov.aleksandr 24.12.2020 09:22

Вы пытались использовать итератор/цикл?

Gil Caplan 24.12.2020 09:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что все списки имеют одинаковый размер. Вы можете использовать IntStream() для обхода и суммирования значений по одному и тому же индексу каждого списка.

Первая итерация IntStream.range(0, l1.size()) состоит в том, чтобы пройти элементы от первого элемента списков до конца.

Вторая итерация IntStream.range(0, values.size()) состоит в том, чтобы охватить все элементы одного и того же индекса: l1.get(0), l2.get(0),...

Чтобы получить сумму l1.get(0) + l2.get(0) +... :

IntStream.range(0, values.size()).mapToDouble(j -> values.get(j).get(i)).sum()

и разделите на values.size(), чтобы получить среднее значение.

Попробуй это:

List<Double> l1 = Arrays.asList(2.0, 10.0, 7.0);
List<Double> l2 = Arrays.asList(7.0, 15.0, 7.0);
List<Double> l3 = Arrays.asList(3.0, 5.0, 7.0);
List<List<Double>> values = Arrays.asList(l1, l2, l3);

List<Double> avgList = IntStream.range(0, l1.size()).boxed()
        .map(i -> IntStream.range(0, values.size()).mapToDouble(j -> values.get(j).get(i)).sum()
                / Double.valueOf(values.size()))
        .collect(Collectors.toList());
System.out.println(avgList);

Выход:

[4.0, 10.0, 7.0]

спасибо, Хюлья. Я сделал это, используя циклы for, но я искал более элегантный способ. так же, как то, что вы сделали.

pumper 24.12.2020 11:38

Другие вопросы по теме