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

时间:2015-11-16 15:16:21

标签: java dictionary lambda 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;
                }));
    }

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

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

我想:

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

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

1 个答案:

答案 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);
}