我有以下课程:
public class Response {
private final Map<Integer, Double> totalListPerKey;
private final String key;
}
我有一个Collection<Response> responses
,需要按键分组,并根据totalListPerKey中的匹配键(整数)对集合中所有项目的映射totalListPerKey中的Double值求和。
即
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)
预期结果:
Object(test,new HashMap[(1234,779.6),(2345,173.5)])
答案 0 :(得分:0)
经过您的解释
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) ) );
答案 1 :(得分:0)
您需要遍历响应的键,例如响应B,检查响应A中是否存在该键,如果存在,则将总和分配给响应A中该键的值(或其他但不是最终值)。 / p>
编辑:如果不存在该密钥,则只需将该条目复制到最终响应中,以便将来进行分组。
如果您要单独保留值,则应保留
之类的地图 private final Map<Integer, List<Double>> totalListPerKey;
的双精度值列表,而不只是一个双精度值。