我想验证一个集合是否为空并且null
. 任何人都可以让我知道最佳做法。
目前,我正在检查如下:
if (null == sampleMap || sampleMap.isEmpty()) {
// do something
}
else {
// do something else
}
我想验证一个集合是否为空并且null
. 任何人都可以让我知道最佳做法。
目前,我正在检查如下:
if (null == sampleMap || sampleMap.isEmpty()) {
// do something
}
else {
// do something else
}
如果您在项目中使用Apache Commons Collections库,您可以使用CollectionUtils.isEmpty
和MapUtils.isEmpty()
方法分别检查集合或地图是否为空或为空(即它们是“空安全的”)。
这些方法背后的代码或多或少是用户@icza 在他的回答中写的。
无论您做什么,请记住,您编写的代码越少,随着代码复杂性的降低,您需要测试的代码就越少。
这是最好的检查方法。您可以编写一个辅助方法来做到这一点:
public static boolean isNullOrEmpty( final Collection< ? > c ) {
return c == null || c.isEmpty();
}
public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
return m == null || m.isEmpty();
}
如果您使用 Spring 框架,那么您可以使用CollectionUtils
来检查集合(列表、数组)和映射等。
if(CollectionUtils.isEmpty(...)) {...}
就个人而言,我更喜欢使用空集合而不是null
让算法以某种方式工作,对于算法来说,集合是否为空并不重要。
当您使用弹簧时,您可以使用
boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);
其中 obj 是任何 [map,collection,array,aything...]
否则:代码是:
public static boolean isEmpty(Object[] array) {
return (array == null || array.length == 0);
}
public static boolean isEmpty(Object obj) {
if (obj == null) {
return true;
}
if (obj.getClass().isArray()) {
return Array.getLength(obj) == 0;
}
if (obj instanceof CharSequence) {
return ((CharSequence) obj).length() == 0;
}
if (obj instanceof Collection) {
return ((Collection) obj).isEmpty();
}
if (obj instanceof Map) {
return ((Map) obj).isEmpty();
}
// else
return false;
}
最好的字符串是:
boolean isNullOrEmpty = (str==null || str.trim().isEmpty());
我们将检查 Collection 对象是否为空、是否为空。下面给出的所有方法都存在于 org.apache.commons.collections4.CollectionUtils 包中。
检查列表或设置集合对象的类型。
CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);
检查对象的地图类型。
MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);
所有方法的返回类型都是布尔值。
您可以使用org.apache.commons.lang.Validate
“ notEmpty ”方法:
Validate.notEmpty(myCollection)
-> 验证指定的参数集合既不是 null 也不是零大小(没有元素);否则抛出异常。
如果您需要检查null,那就是这样。但是,如果您对此有控制权,请尽可能返回空集合,然后仅检查是否为空。
这个线程与 C# 大致相同,但原则同样适用于 java。就像那里提到的那样,只有在
- null 可能意味着更具体的东西;
- 您的 API(合同)可能会强制您返回 null。
对于包括地图在内的所有集合,请使用isEmpty
这些集合对象上的方法。但是你必须先做一个空检查:
Map<String, String> map;
........
if(map!=null && !map.isEmpty())
......