我有两个HashMap
我怎样才能简单地求和呢?
这意味着对于字符串a,键将是(Map1的值从Map2的值)的总和?
我可以迭代Map2的每一项,并手动添加到Map1。
但你觉得有更简单的方法吗?
我更喜欢把整数相加成一个映射。不创造一个新的
不幸的是,没有简单的方法。您需要手动迭代它们。
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class HashMapSum {
public static void main(String[] args) {
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("a", 1);
map1.put("b", 2);
map1.put("c", 3);
Map<String, Integer> map2 = new HashMap<String, Integer>();
map2.put("a", 4);
map2.put("b", 5);
map2.put("d", 6);
Set<String> keySet = new HashSet<String>();
keySet.addAll(map1.keySet());
keySet.addAll(map2.keySet());
Map<String, Integer> map3 = new HashMap<String, Integer>();
Integer val1, val2;
for (String key : keySet) {
val1 = map1.get(key);
val1 = (val1 == null ? 0 : val1);
val2 = map2.get(key);
val2 = (val2 == null ? 0 : val2);
map3.put(key, val1 + val2);
}
System.out.println(map3.toString());
}
}
如果您喜欢Java 8:
Map<String, Integer> sum(Map<String, Integer>... maps) {
return Stream.of(maps) // Stream<Map<..>>
.map(Map::entrySet) // Stream<Set<Map.Entry<..>>
.flatMap(Collection::stream) // Stream<Map.Entry<..>>
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
Integer::sum));
}
可以汇总任意数量的地图。它将地图数组转换为流
或者是类似于
void addToA(HashMap<String, Integer> a, HashMap<String, Integer> b) {
for (Entry<String, Integer> entry : b.entrySet()) {
Integer old = a.get(entry.getKey());
Integer val = entry.getValue();
a.put(entry.getKey(), old != null ? old + val : val);
}
}
因为Java8Map
包含merge
方法,该方法需要
所以你可以简单地使用:
map2.forEach((k, v) -> map1.merge(k, v, Integer::sum));
现在,您的map1
将包含来自map2
的所有值,在相同键的情况下,旧值将被添加到新值中,结果将存储在map中。
演示:
Map<String, Integer> m1 = new HashMap<>();
m1.put("a", 1);
m1.put("b", 2);
Map<String, Integer> m2 = new HashMap<>();
m2.put("a", 3);
m2.put("c", 10);
System.out.println(m1);
System.out.println(m2);
//iterate over second map and merge its elements into map 1 using
//same key and sum of values
m2.forEach((k, v) -> m1.merge(k, v, Integer::sum));
System.out.println("===========");
System.out.println(m1);
输出:
{a=1, b=2}
{a=3, c=10}
===========
{a=4, b=2, c=10}
问题内容: 我有两个 我如何轻松总结它们? 意思是对于字符串“ a”,键将是(来自Map1的值+来自Map2的值)的总和? 我可以迭代Map2的每个项目,然后手动将其添加到Map1。 但是认为可能会有更简单的方法吗? 我更喜欢将Integers汇总到其中一张地图中。不创建一个新的 问题答案: 由于Java 8 包含需要 键, 新价值, 和函数, 如果该值已经包含我们的密钥 ,它将用来决定要在地图中
本文向大家介绍6步轻松实现两个listView联动效果,包括了6步轻松实现两个listView联动效果的使用技巧和注意事项,需要的朋友参考一下 看了网上更新的好多联动demo,感觉写的不是很简洁(表示不知道他们在说什么) 自己写了一个简单的Demo分享给大家- -! 效果图: 直接上车,少说废话! 所用到以下的这几个依赖,直接粘到Build.gradle文件中 1.定义首页的布局文件 2.Main
问题内容: 有没有一种方法可以让IDE自动修复Checkstyle错误,而不必手动修复每个错误? 问题答案: 如果您使用的是Eclipse,则可以。但是,您无法解决所有问题。有两种方法: 右键点击Package Explorer或其他中的Java文件,然后选择“应用Checkstyle改正”。 单击问题视图中的错误,然后选择“快速修复”。这样可以解决问题。
问题内容: 我开发了一个简单的Python应用程序来做一些事情,然后决定使用Tkinter添加一个简单的GUI。 问题在于,当main函数正在执行其工作时,窗口会冻结。 我知道这是一个普遍的问题,我已经读过我应该使用多线程(非常复杂,因为该函数还会更新GUI)或将我的代码划分为不同的函数,每个函数工作一段时间。无论如何,我不想为这样一个愚蠢的应用程序更改代码。 我的问题是:有没有简便的方法可以每秒
我开发了一个简单的Python应用程序,做了一些工作,然后我决定使用Tkinter添加一个简单的GUI。 问题是,当主函数在做它的事情时,窗口冻结了。 我知道这是一个常见的问题,我已经读到我应该使用多线程(非常复杂,因为函数也更新图形用户界面)或者在不同的函数中划分我的代码,每一个都工作一点时间。无论如何,我不想为这样一个愚蠢的应用程序更改我的代码。 我的问题是:是否有可能没有一种简单的方法可以每
轻松上传是魔方加密开发的快速上传组件。轻松上传的环境要求: Microsoft Windows 操作系统 Google Chrome 浏览器 使用步骤 安装轻松上传后,您可以通过以下步骤使用: 打开 Windows 资源管理器,选择需要上传的 PHP 文件 按下 CTRL+C 复制文件 打开魔方加密页面 按下 CTRL+V 粘贴文件 等待文件上传 安装方法 点击这里 打开 Chrome 网上应用店