如何使用Streams获取列表地图值的平均值?

时间:2017-04-23 11:04:32

标签: java java-8 java-stream

我有一个散列图Map<String,List<Double>> incomeListString密钥和List Double作为值,保留了这些数据:

seattle [50000.0 40000.0 30000.0]
sanFrancisco [60000.0 100000.0]

我想将城市及其平均收入存储在新HashMap中,以便最终结果如下:

seattle 40000.0
sanFrancisco 80000.0

我正在使用此代码创建此地图:

Map<String,Double> avarage = incomeList.entrySet().stream()
         .map(e -> e.getValue().stream().mapToDouble(Double::doubleValue).average())
         .collect(Collectors.toMap(Entry::getKey, Entry::getValue));

但是我收到了这个错误:

非静态方法无法从静态上下文中引用

有没有人知道如何使用Stream s来实现这一点?

1 个答案:

答案 0 :(得分:4)

您应该将原始值(List<Double>)映射到将其收集到输出Map中时的平均值:

Map<String,Double> avarage = 
    incomeList.entrySet()
              .stream()
              .collect(Collectors.toMap(Map.Entry::getKey,
                                        e-> e.getValue()
                                             .stream()
                                             .mapToDouble(Double::doubleValue)
                                             .average()
                                             .getAsDouble()));