首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8 lambdas用于查找地图列表的平均值

Java 8 lambdas用于查找地图列表的平均值
EN

Stack Overflow用户
提问于 2016-07-13 16:30:53
回答 1查看 311关注 0票数 7

使用Java-8 streams/lambdas,我如何通过键找到映射列表的平均值?

示例:

代码语言:javascript
运行
复制
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)

有了老的好foreach,这很简单,我想知道这是否可以用lambdas实现。我需要它的原因是我将使用Apache Spark,Java-8 lambdas将是更标准的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-07-13 17:15:31

正如Andrew Tobilko所说,您应该使用适当的数据结构,而不是Map

如果您坚持使用List<Map<>>,那么您需要对Map::entrySet执行Stream::flatMap操作并使用正确的Collector

代码语言:javascript
运行
复制
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}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38346454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档