合并两个映射并保留空值

问题描述 投票:0回答:1

希望你一切都好。

我有两个地图,我想保留空值。我知道 merge 函数无法管理空值,但我需要保留空数据并使用二元运算。

我如何管理我的代码以避免 NPE。

  private Map<String, Object> mergeMaps(
      Map<String, Object> map1, Map<String, Object> map2) {
    return Stream.of(map1, map2)
        .map(Map::entrySet)
        .flatMap(Collection::stream)
        .collect(
            Collectors.toMap(
                Map.Entry::getKey,
                Map.Entry::getValue,
                (v1, v2) -> StringUtils.isNotEmpty(v1.toString()) ? v1 : v2;
                ));
  }

非常感谢。

java null nullpointerexception hashmap
1个回答
0
投票

我会去

  Map<String, Object> mergeMaps(Map<String, Object> map1, 
                                Map<String, Object> map2) {
    Map<String, Object> result = new HashMap<>(map1);
    map2.forEach((k, v) -> {
      if (isNullOrEmpty(result.get(k))) {
        result.put(map2.get(k));
      }
    }
    return result;
  }

我用这个来测试

  public static void main(String[] args) {
    Map<String, Object> map1 = new HashMap<>();
    map1.put("k1", null);
    map1.put("k2", "2");
    map1.put("k3", null);
    Map<String, Object> map2 = new HashMap<>();
    map2.put("k1", "1");
    map2.put("k2", null);
    map2.put("k3", null);

    var result = mergeMaps(map1, map2);

    System.out.println(result);
  }

输出

{k3=null, k1=1, k2=2}
,我认为这就是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.