首页 > 解决方案 > 将 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 有效地做到这一点?

标签: java-8

解决方案


你可以这样做:

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);

推荐阅读