当第一个地图没有元素时,mergeMaps不起作用?

Ela*_*nda 5 java lambda dictionary hashmap

我尝试合并两张地图

      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;
                }));
    }
Run Code Online (Sandbox Code Playgroud)

但是当current有0个元素时,lambda不会被执行.

如果没有合并可以不合并吗?

我想要:

map1{} ; map2{<a,<a1>>} returns map3{<a,<a1>>}

map1{<a,<b1>>} ; map2{<a,<a1>>} returns map3{<a,<a1, b1>>}
Run Code Online (Sandbox Code Playgroud)

And*_*ner 1

如果您调用forEach一个空集合,显然没有任何东西可以执行 lambda。

如果HashMap.merge这是您想要合并列表的方式,您可以在第一个为空的情况下交换地图:

if (current.isEmpty()) {
  HashMap<String, FailureExample> tmp = current;
  current = other;
  other = tmp;
}
Run Code Online (Sandbox Code Playgroud)

但是,这会将元素添加到other,而不是current

或者,您可以将putAll所有内容都放入第一个地图中:

if (current.isEmpty()) {
  current.putAll(other);
}
Run Code Online (Sandbox Code Playgroud)