希望你一切都好。
我有两个地图,我想保留空值。我知道 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;
));
}
非常感谢。
我会去
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}
,我认为这就是你想要的。