我尝试合并两张地图
private void mergeMaps(HashMap<String, FailureExample> current,
HashMap<String, FailureExample> other) {
current.forEach((k, v) -> other.merge(k, v,
(v1, v2) -> {
FailureExample answer = new FailureExample();
addFromListWithSizeLimit(v1, answer);
addFromListWithSizeLimit(v2, answer);
// answer.requests.addAll(v1.requests);
// answer.requests.addAll(v2.requests);
return answer;
}));
}
但是当current有0个元素时,lambda不会被执行。
如果没有合并可以合并吗?
我想:
map1{} ; map2{<a,<a1>>} returns map3{<a,<a1>>}
map1{<a,<b1>>} ; map2{<a,<a1>>} returns map3{<a,<a1, b1>>}
答案 0 :(得分:1)
如果你在空集合上调用forEach
,显然没有什么可以执行lambda。
如果HashMap.merge
是您想要合并列表的方式,那么您可以在第一个为空的情况下交换映射:
if (current.isEmpty()) {
HashMap<String, FailureExample> tmp = current;
current = other;
other = tmp;
}
但是,这会将元素添加到other
,而不是current
。
或者,您可以putAll
将所有内容放入第一张地图:
if (current.isEmpty()) {
current.putAll(other);
}