276

我想验证一个集合是否为空并且null. 任何人都可以让我知道最佳做法。

目前,我正在检查如下:

if (null == sampleMap || sampleMap.isEmpty()) {
  // do something
} 
else {
  // do something else
}
4

9 回答 9

414

如果您在项目中使用Apache Commons Collections库,您可以使用CollectionUtils.isEmptyMapUtils.isEmpty()方法分别检查集合或地图是否为或为(即它们是“空安全的”)。

这些方法背后的代码或多或少是用户@icza 在他的回答中写的。

无论您做什么,请记住,您编写的代码越少,随着代码复杂性的降低,您需要测试的代码就越少。

于 2012-10-04T07:30:59.060 回答
85

这是最好的检查方法。您可以编写一个辅助方法来做到这一点:

public static boolean isNullOrEmpty( final Collection< ? > c ) {
    return c == null || c.isEmpty();
}

public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
    return m == null || m.isEmpty();
}
于 2012-10-04T05:56:24.020 回答
50

如果您使用 Spring 框架,那么您可以使用CollectionUtils来检查集合(列表、数组)和映射等。

if(CollectionUtils.isEmpty(...)) {...}
于 2016-12-07T02:32:25.530 回答
22

就个人而言,我更喜欢使用空集合而不是null让算法以某种方式工作,对于算法来说,集合是否为空并不重要。

于 2012-10-04T05:57:06.920 回答
15

当您使用弹簧时,您可以使用

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());
于 2017-03-06T09:40:32.337 回答
6

我们将检查 Collection 对象是否为空、是否为空。下面给出的所有方法都存在于 org.apache.commons.collections4.CollectionUtils 包中。

检查列表或设置集合对象的类型。

CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);

检查对象的地图类型。

MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);

所有方法的返回类型都是布尔值。

于 2020-03-18T06:02:23.947 回答
4

您可以使用org.apache.commons.lang.ValidatenotEmpty ”方法:

Validate.notEmpty(myCollection)-> 验证指定的参数集合既不是 null 也不是零大小(没有元素);否则抛出异常。

于 2017-08-22T17:25:40.700 回答
3

如果您需要检查null,那就是这样。但是,如果您对此有控制权,请尽可能返回空集合,然后仅检查是否为空。

这个线程与 C# 大致相同,但原则同样适用于 java。就像那里提到的那样,只有在

  • null 可能意味着更具体的东西;
  • 您的 API(合同)可能会强制您返回 null。
于 2012-10-04T06:03:11.720 回答
-3

对于包括地图在内的所有集合,请使用isEmpty这些集合对象上的方法。但是你必须先做一个空检查:

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......
于 2017-09-13T05:08:59.867 回答