Привет, я хочу найти среднее значение списка двойников и вернуть список двойников, который является средним значением исходного списка. Как я могу сделать это в потоках Java?
List<Double> comupteAverage(List<List<Double>> values)
{
List<Double> averages=?;
return averages;
}
Каждый возвращенный элемент списка является средним значением для каждого элемента списка в той же позиции в исходном списке. Надеюсь, я смог правильно описать проблему. Спасибо.
Вы пытались использовать итератор/цикл?
Я предполагаю, что все списки имеют одинаковый размер. Вы можете использовать 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, но я искал более элегантный способ. так же, как то, что вы сделали.
Вы должны показать, что вы сделали сами