Помогите функцию перевести в stream api

257
05 октября 2017, 11:06

Есть матрица:

List<ArrayList<Double>> matr;

требуется в матрице найти среднее значение, без стримов я это делаю так:

 public Double averageMatr() {
        Double sum=0.0;
        for (ArrayList<Double> list : matr) {
            for (Double item : list) {
                sum+=item;
            }
        }
        return sum/matr.size()*countColumn;
    }

Подскажите как можно этот цикл записать в стримах?

Пытался сделать вот так:

public Double averageMatr() {
        Double sum=0.0;
        for (ArrayList<Double> list : matr) {
           sum+= list.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
        }
        return sum/matr.size();
    }

Но так получается неверный результат. со строк находится среднее значение, и дальше берется среднее значение из средних значений. То есть неверно.

Answer 1

Это делается очень просто с помощью метода Stream.flatMap:

matr.stream().flatMap(Collection::stream).mapToDouble(d -> d).average()
READ ALSO
Добавление DataTemplate в ListBox (DataTemplateSelector)

Добавление DataTemplate в ListBox (DataTemplateSelector)

Всем доброго времени сутокПытаюсь сделать окно чата через ListBox , DataTemplate, DataTemplateSelector

325
Как с помощью Microsoft Bot Framework сделать кнопки в несколько рядов?

Как с помощью Microsoft Bot Framework сделать кнопки в несколько рядов?

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

216
c# лагает программа при прорисовке

c# лагает программа при прорисовке

Есть программа по типу игры лабиринта, реализована в windows formsНеобходимо сделать так, чтобы не весь лабиринт был виден сразу (как на рисунке)

314
Доступ к event из вне

Доступ к event из вне

Возможно ли дать доступ к event в другой dll?

218