首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用Java Stream grouping后对列表中object的Map<Integer,Double>中的双精度值求和

如何在使用Java Stream grouping后对列表中object的Map<Integer,Double>中的双精度值求和
EN

Stack Overflow用户
提问于 2018-08-01 04:55:37
回答 2查看 352关注 0票数 -1

我有如下的类:

代码语言:javascript
复制
public class Response {
     private final Map<Integer, Double> totalListPerKey;
     private final String key;
}

我得到了一个Collection<Response> responses,它需要按键分组,并根据totalListPerKey中匹配的键(整数)对集合中所有项在映射totalListPerKey中的双精度值求和。

代码语言:javascript
复制
Response A = new Response(new HashMap[(1234,325.3),(2345,123.5)],test)
Response B = new Response(new HashMap[(1234,454.3),(2345,50)],test)

预期结果:

代码语言:javascript
复制
Object(test,new HashMap[(1234,779.6),(2345,173.5)])
EN

回答 2

Stack Overflow用户

发布于 2018-08-01 05:20:19

听完你的解释

代码语言:javascript
复制
Map<Integer, Set<Double>> collectSetOfDoublesByIntKey = objsWithIntAndDouble.stream().collect( Collectors.groupingBy(Obj::getInt, Collectors.mapping(Obj::getDouble, Collectors.toSet()) ) );
Map<Integer, Double> collectSumOfDoublesByIntKey = objsWithIntAndDouble.stream().collect( Collectors.groupingBy(Obj::getInt, Collectors.summingDouble(Obj::getDouble) ) ); 
票数 0
EN

Stack Overflow用户

发布于 2018-08-01 05:28:49

您需要迭代响应的键,例如响应B,检查它是否存在于响应A中,如果存在,则将总和赋给响应A中的键的值(或其他但不是最终的键)。

编辑:如果键不存在,只需将该条目复制到最终响应中,以供将来分组。

如果你想单独保存这些值,那么你应该像这样保存一个映射

private final Map<Integer, List<Double>> totalListPerKey;一个双精度的列表,而不仅仅是一个双精度值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51621925

复制
相关文章

相似问题

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