我想验证一个集合是否为空并且null。谁能告诉我最好的做法。
null
目前,我正在检查如下:
if (null == sampleMap || sampleMap.isEmpty()) { // do something } else { // do something else }
这是最好的检查方法。你可以写一个helper方法来做这件事:
public static boolean isNullOrEmpty( final Collection< ? > c ) { return c == null || c.isEmpty(); } public static boolean isNullOrEmpty( final Map< ?, ? > m ) { return m == null || m.isEmpty(); }
就我个人而言,我更喜欢使用空集合而不是null,并让算法以一种方式工作,即对于算法来说,集合是否为空并不重要。
如果你需要检查是否为空,这就是方法。然而,如果你可以控制它,只要你可以,就返回空集合,然后只检查是否为空。
这个线程与c#是同样的事情,但原则同样适用于java。就像前面提到的,null应该只在
Null可能意味着更具体的东西; 你的API(合约)可能会强制你返回null。
如果你在项目中使用Apache Commons Collections库,你可以使用CollectionUtils.isEmpty和MapUtils.isEmpty()方法,它们分别检查集合或映射是否为空或零(即它们是“空安全的”)。
CollectionUtils.isEmpty
MapUtils.isEmpty()
这些方法背后的代码或多或少是用户@icza在他的答案中所写的。
无论您做什么,请记住,您编写的代码越少,您需要测试的代码就越少,因为您的代码的复杂性会降低。
如果你使用Spring框架,那么你可以使用CollectionUtils来检查集合(列表,数组)和映射等。
CollectionUtils
if(CollectionUtils.isEmpty(...)) {...}
当你使用弹簧时,你可以使用
boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);
其中obj是任何[映射,集合,数组,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; }
String的最佳格式是:
boolean isNullOrEmpty = (str==null || str.trim().isEmpty());
你可以使用org.apache.commons.lang.Validate的"notEmpty"方法:
org.apache.commons.lang.Validate
Validate.notEmpty(myCollection) ->验证指定的参数集合既不是null也不是0(没有元素);否则抛出异常。
Validate.notEmpty(myCollection)
对于包括map在内的所有集合,使用:isEmpty方法,该方法存在于这些集合对象中。但你必须做一个空检查之前:
isEmpty
Map<String, String> map; ........ if(map!=null && !map.isEmpty()) ......
我们将检查Collection对象是否为空。下面给出的所有方法都在org.apache.commons.collections4.CollectionUtils包中。
检查列表或集合对象的类型。
CollectionUtils.isEmpty(listObject); CollectionUtils.isNotEmpty(listObject);
检查对象的映射类型。
MapUtils.isEmpty(mapObject); MapUtils.isNotEmpty(mapObject);
所有方法的返回类型都是布尔型。