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