java-8 - 将 Map 的值合并到 Map 的第一个键的查询
问题描述
我有一个带有几个键值对的哈希图。
我的要求是遍历所有键值对,但将所有值合并到哈希集的第一个键。
例如,
Map<String,Integer> resultMap = new HashMap();
Map<String,Integer> map = new HashMap();
map.put("abc",1);
map.put("def",2);
map.put("efg",3);
map.put("uvw",4);
map.put("xyz",5);
我想做类似的事情:
map.foreach((k,v)->resultMap.merge(k,v,(v1,v2)->v1+v2)
结果映射将只有一个键,即“abc”,值为 (1+2+3+4+5)=15
如何使用 java8 有效地做到这一点?
解决方案
你可以这样做:
String firstKey = "";
for (Map.Entry<String,Integer> entry:map.entrySet()) {
if (resultMap.isEmpty()) firstKey = entry.getKey();
resultMap.merge(firstKey, entry.getValue(), Integer::sum);
}
流版本:
resultMap = map.entrySet().stream()
.collect(HashMap::new, (m, e) ->
{
if (m.isEmpty()) m.put(e.getKey(), e.getValue());
else m.merge(m.entrySet().stream()
.findFirst().get().getKey(),e.getValue(),Integer::sum);
}
, HashMap::putAll);
推荐阅读
- xml - 使用 Groovy 在日志文件中定义多个 XML 行
- javascript - 我该如何解决这个错误?错误:找不到模块
- java - JavaFX 矩形监听器
- angular - Angular 4 不发送一些请求
- vue.js - 使用从获取的数据中计算出来的计算数据的正确方法是什么?
- android-layout - 'coordinatorLayoutStyle' 出现新的 android studio 渲染问题
- c++ - Linux 上的 curl_easy_perform 分段错误
- spring - 限制用户每篇文章发表一定数量的评论
- google-apps-script - 将条件格式传输到文档
- server - 让 PHP 和普通用户编辑相同文件的三种方法