Bog*_*dan 7 java lambda java-8 java-stream
如何使用Java-8流/ lambdas,通过键找到地图列表的平均值?
例:
List<Map<String, Double>> users = Arrays.asList(
new HashMap<String, Double>()
{{
put("weight", 109.0);
put("height", 180.2);
}},
new HashMap<String, Double>()
{{
put("weight", 59.0);
put("height", 186.2);
}}
);
Map<String, Double> statistics =
//<MISSED CODE with lambdas> (?)
System.out.println(statistics);
//{weight=84.0, height=183.1)
Run Code Online (Sandbox Code Playgroud)
有了旧的好的foreachs它很简单,我想知道是否可以用lambdas实现.我需要它的原因是我将使用Apache Spark和Java-8 lambdas将是一个更标准的方法.
正如Andrew Tobilko所说,你应该使用一个合适的数据结构而不是Maps.
如果你坚持使用List<Map<>>,那么你需要Stream::flatMap的Map::entrySet,并使用正确的Collector秒.
List<Map<String, Double>> users = Arrays.asList(new HashMap<String, Double>() {
{
put("weight", 109.0);
put("height", 180.2);
}
}, new HashMap<String, Double>() {
{
put("weight", 59.0);
put("height", 186.2);
}
});
Map<String, Double> statistics = users.stream().flatMap(m -> m.entrySet().stream())
.collect(
Collectors.groupingBy(Entry::getKey, Collectors.averagingDouble(Entry::getValue))
);
System.out.println(statistics);
// {weight=84.0, height=183.2}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |