在Java中用HashMap计算List <Double>的平均值

Ant*_*ead 1 java math hashmap java-8 java-stream

给出从名称到数字列表的映射.

我想使用java 8 stream api计算每个Name的平均值.

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

Map<String, Double> NameToMean = ?
Run Code Online (Sandbox Code Playgroud)

YCF*_*F_L 5

你需要这样的东西:

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())
        );
    }
Run Code Online (Sandbox Code Playgroud)

或者你可以创建一个方法来制作平均值并将其返回,例如:

public Double average(List<Double> values) {
    return values.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
}
Run Code Online (Sandbox Code Playgroud)

那你的代码可以是:

Map<String, Double> nameToMean = nameToQuaters.entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey, e -> average(e.getValue())) );
Run Code Online (Sandbox Code Playgroud)