Java 8 中作为 Stream 的 Null 安全集合

新手上路,请多包涵

我正在寻找可以生成集合流但空值安全的方法。如果集合为空,则返回空流。像这样:

 Utils.nullSafeStream(collection).filter(...);

我创建了自己的方法:

 public static <T> Stream<T> nullSafeStream(Collection<T> collection) {
    if (collection == null) {
        return Stream.empty();
    }
    return collection.stream();
}

但是我很好奇,标准JDK中是否有这样的东西?

原文由 Gondy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您可以使用 org.apache.commons.collections4.CollectionUtils::emptyIfNull 函数:

 import static org.apache.commons.collections4.CollectionUtils.emptyIfNull;

emptyIfNull(list).stream()
                 .filter(...);

原文由 greg 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 Optional

 Optional.ofNullable(collection).orElse(Collections.emptySet()).stream()...

我任意选择了 Collections.emptySet() 作为默认值,以防 collection 为空。这将导致 stream() 方法调用产生一个空的 Stream 如果 collection 为空。

例子 :

 Collection<Integer> collection = Arrays.asList (1,2,3);
System.out.println (Optional.ofNullable(collection).orElse(Collections.emptySet()).stream().count ());
collection = null;
System.out.println (Optional.ofNullable(collection).orElse(Collections.emptySet()).stream().count ());

输出:

 3
0

或者,正如 marstran 所建议的,您可以使用:

 Optional.ofNullable(collection).map(Collection::stream).orElse(Stream.empty ())...

原文由 Eran 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题