Java 8 关于将映射值合并到映射的第一个键的查询

Java 8 关于将映射值合并到映射的第一个键的查询,java-8,Java 8,我有一个包含很少键值对的hashmap 我的要求是迭代所有键和值对,但将所有值合并到哈希集的第一个键 比如说, 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(&q

我有一个包含很少键值对的hashmap

我的要求是迭代所有键和值对,但将所有值合并到哈希集的第一个键

比如说,

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);
结果映射只有一个键,即“abc”,值为(1+2+3+4+5)=15


如何使用java8高效地实现这一点?

您可以先对映射的所有值求和,然后使用第一个键将其添加到resultMap

int sum = map.values().stream().reduce(0, Integer::sum);

Map.Entry<String,Integer> entry = map.entrySet().iterator().next();

String key = entry.getKey();
resultMap.put(key,sum);

int-sum=map.values().stream().reduce(0,Integer::sum);
Map.Entry=Map.entrySet().iterator().next();
String key=entry.getKey();
结果映射put(键、和);
使用合并函数,首先对原始地图中不存在的“randomKey”的所有值求和。然后用原始贴图的第一个关键点替换随机关键点


map.forEach((k,v)->resultMap.merge("randomKey",v,Integer::sum));
        
Map.Entry<String,Integer> entry = map.entrySet().iterator().next();

Object obj = resultMap.remove("randomKey");

resultMap.put(entry.getKey(), (Integer) obj);


forEach((k,v)->resultMap.merge(“randomKey”,v,Integer::sum));
Map.Entry=Map.entrySet().iterator().next();
Object obj=resultMap.remove(“随机键”);
resultMap.put(entry.getKey(),(Integer)obj);
您可以这样做:

String firstKey = "";
for (Map.Entry<String,Integer> entry:map.entrySet()) {
     if (resultMap.isEmpty()) firstKey = entry.getKey();
     resultMap.merge(firstKey, entry.getValue(), Integer::sum);
}

不幸的是,我不得不使用地图合并功能,不知道为什么要使用合并功能?已使用合并功能更新了答案。请检查希望您知道哈希集没有确定的第一个键。因此,您可以将所有值与您可能已经知道的键相加。
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);