26

JDK或Google Guava中是否有类似的方法

public static <T> Collection<T> safe(Collection<T> collection) {
    if (collection == null) {
        return new ArrayList<>(0);
    } else {
        return collection;
    }
}

例如,如果某些内容返回空列表,则可以很容易地在增强的循环中不崩溃

for (String string : CollectionUtils.safe(foo.canReturnANullListOfStrings())) {
    // do something
}

不会崩溃。

我环顾四周,但找不到任何这样的方法,我想知道我是否错过了它,或者是否有原因导致这种方便的方法不方便因此不包括在内?

4

5 回答 5

28
Objects.firstNonNull(list, ImmutableList.<Foo>of());

不需要专门的方法,这确实是我们建议您立即使用的解决方案,只要您从一个理想情况下不应该首先这样做的顽皮 API 获得可能为空的集合。

于 2013-02-15T21:31:13.560 回答
23

Apache Collections 4 有一个通用方法ListUtils.emptyIfNull(List<T> list)

这是文档:https ://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/ListUtils.html

于 2016-08-03T03:50:43.343 回答
18

在 Java 8 中可以这样使用:

Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList());
于 2016-12-09T13:52:32.697 回答
6

Java 9 的更新: java.util.Objects.requireNonNullElse(collection, List.<T>of())

<T>仍然是必需的。

于 2018-09-14T11:07:29.907 回答
1

因此,据我所知,不存在这种功能。但是,正如您在上面显示的那样,编写一个是微不足道的。为什么它可能未被包括在内的原因是因为它具有特定的含义,并且在传递时null返回空可能不合适。Collection通常(根据我的经验),当一个空值进入系统时,链上的某些东西会失败,或者无效值没有得到适当的清理。

于 2013-02-15T21:27:29.597 回答