【发布时间】:2017-05-05 16:22:59
【问题描述】:
我有两个HashMap<String, Integer> 我怎样才能得到这些值的平均值?
HashMap<String, Integer> map1 = ...
map1.put("str1", 7);
map1.put("str2", 4);
HashMap<String, Integer> map2 = ...
map2.put("str1", 3);
map2.put("str2", 2);
预期的输出是:
("str1") = 5;
("str2") = 3;
我能够按如下方式检索两张地图的总和:
map2.forEach((k, v) -> map1.merge(k, v, Integer::sum));
但是如何使用 Java 8 检索两个地图的平均值?
更新:
应@的要求,我发布了我的大部分代码:
HashMap<String, HashMap<String, Double>> map;
HashMap<String, Double> map2 = new HashMap<String, Double>();
map = func1();
map = func2();
map = func3();
for (Entry<String, HashMap<String, Double>> entry : map.entrySet()) {
String key = entry.getKey();
HashMap<String, Double> mp = map.get(key);
mp.forEach((k, v) -> map2.merge(k, v, (t, u) -> (t + u) / 2));
for (Entry<String, Double> entry1 : mp.entrySet()) {
StringfieldName = entry1.getKey();
Double score= entry1.getValue();
System.out.println(fieldName.toString() + " = " + score);
}
}
return map2;
}
【问题讨论】:
-
如果您已经有了总和,那么是什么阻止您将其除以 2 并得到平均值?
-
我试过了:
mp.forEach((k, v) -> map2.merge(k, v, Integer::sum) / 2)但我不能在这个表达式中进行除法(“Void 方法不能返回值”) -
@kichik 取决于他的平均意思。我以为是
sum / (map1.values().size() + map2.values().size()) -
如果您期望浮点结果,您还需要注意整数除法。
-
您的解决方案似乎是正确的(有时它会偏离几个整数,例如它 avg 280 / 3 = 95 而不是 93.3 但这可能是因为我使用的是整数而不是双倍)但总的来说它是正确的做法。我会删除我的答案并接受你的。
标签: java java-8 hashmap java-stream