Вычислить среднее значение списка <Double>в HashMap в Java - PullRequest
0 голосов
/ 29 августа 2018

Дана карта от Имен до списков Чисел.

Я бы хотел вычислить среднее значение для каждого Имени, используя API потока Java 8.

Map<String, List<Double>> NameToQuaters = new HashMap<>();

Map<String, Double> NameToMean = ?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Это должно сработать:

Map<String, List<Double>> nameToQuaters = new HashMap<>();
//fill source map
Map<String, Double> nameToMean = new HashMap<>();
nameToQuaters.
    .forEach((key, value) -> nameToMean.put(key, value.stream().mapToDouble(a -> a).average().getAsDouble()));
0 голосов
/ 29 августа 2018

Вам нужно что-то вроде этого:

Map<String, Double> nameToMean = nameToQuaters.entrySet()
        .stream()
        .collect(Collectors.toMap(
                // the key is the same
                Map.Entry::getKey,
                // for the value of the key, you can calculate the average like so
                e -> e.getValue().stream().mapToDouble(Double::doubleValue).average().getAsDouble())
        );
    }

Или вы можете создать метод, который делает среднее и возвращает его, например:

public Double average(List<Double> values) {
    return values.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
}

тогда ваш код может быть:

Map<String, Double> nameToMean = nameToQuaters.entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey, e -> average(e.getValue())) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...