Java是否有像
这样的东西map.putIfValueNotNull(key, value)
因此,只有在没有明确检查的情况下它不为空时,我才能将值放在地图中。
答案 0 :(得分:6)
你可以使用computeIfAbsent()
函数检查密钥是否已经在地图中,如果它在那里它没有做任何事情。
如果密钥不存在,那么它会检查计算的值是否为空,如果不是,则将其放入映射中。
map.computeIfAbsent(key, val -> value);
注意,putIfAbsnet
会将空值放入地图中。
答案 1 :(得分:5)
我知道org.apache.commons.collections4.MapUtils
包含方法safeAddToMap()
,但如果value
为null
,则会添加empty string
,这不是您想要的。
我不喜欢变体,要覆盖HashMap
来实现新方法,因为在这种情况下,您没有其他实现:TreeMap
或LinkedHashMap
或其他。
我不知道这个函数存在于某些可用库中,如Apache
或类似的。
因此,在我的项目中,我必须自己实施:
public static <K, V> Map<K, V> addNotNull(Map<K, V> map, K key, V value) {
if(value != null)
map.put(key, value);
return map;
}
答案 2 :(得分:2)
我尝试了以下操作,似乎有效。
Map<String, String> map = new HashMap<>();
String object1 = "blah";
String object2 = null;
map.compute("key1", (k, v) -> object1);
map.compute("key2", (k, v) -> object2);
System.out.println(map);
我不知道是否有表现或其他考虑因素会使这种方式不受欢迎。它看起来很干净。如果object1
或object2
为空,则他们不会在地图中结束。当我运行这个时,我得到以下结果。
{key1=blah}
请注意,如果地图中已存在具有相同键的值,则会替换该值。
答案 3 :(得分:1)
根据Java documentation,如果指定的键尚未与某个值关联(或已映射为null),则尝试使用给定的映射函数计算其值并将其输入此映射中,除非为null 。
一个简单的例子:
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("1", "ONE");
map.put("2", null);
map.computeIfAbsent("3", val -> "THREE");
map.computeIfAbsent("4", val -> null);
System.out.println(map);
}
此输出为-
{1=ONE, 2=null, 3=THREE}
很明显,如果通过computeIfAbsent方法添加,则输出不包含空值,而如果通过普通put方法添加,则存在空值。