我想验证一个集合是否为空和null。谁能告诉我最好的做法。

目前,我正在检查如下:

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

当前回答

对于包括map在内的所有集合,使用:isEmpty方法,该方法存在于这些集合对象上。但你必须做一个空检查之前:

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......

其他回答

如果你在你的项目中使用Apache Commons Collections库,你可以使用CollectionUtils.isEmpty(…)和MapUtils.isEmpty(…)方法分别检查一个集合或映射是空的还是空的(即它们是“空安全的”)。

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

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

如果你需要检查是否为空,这就是方法。然而,如果你可以控制它,只要你可以,就返回空集合,然后只检查是否为空。

这个线程是关于c#的相同的事情,但原则同样适用于java。就像前面提到的,null应该只在

Null可能意味着更具体的东西; 你的API(合约)可能会强制你返回null。

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

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());

这是最好的检查方法。你可以写一个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();
}

如果你使用Spring框架,那么你可以使用CollectionUtils检查集合(List, Array)和Map等。

if(CollectionUtils.isEmpty(...)) {...}