在生成流之前执行 空检查 的 最佳/惯用 方法是什么?
我有一个接收 List
的方法,它可能是 null
。所以我不能只对传递的值调用 stream()
。如果值为空,是否有一些静态助手会给我一个空流?
原文由 checketts 发布,翻译遵循 CC BY-SA 4.0 许可协议
在生成流之前执行 空检查 的 最佳/惯用 方法是什么?
我有一个接收 List
的方法,它可能是 null
。所以我不能只对传递的值调用 stream()
。如果值为空,是否有一些静态助手会给我一个空流?
原文由 checketts 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
我同意 Stuart Marks 的观点,即
list == null ? Stream.empty() : list.stream()
是执行此操作的正确方法(请参阅 他的回答),或者至少是执行此 pre-Java 9 的正确方法(请参阅下面的编辑),但我会离开此答案最多可演示 Optional API 的用法。编辑: Java 9 添加了静态工厂方法
Stream.<T>ofNullable(T)
,它在给定null
参数的情况下返回空流,否则返回以参数作为其唯一元素的流。如果参数是一个集合,那么我们可以flatMap
将它变成一个流。这不会像 Stuart Marks 所讨论的那样滥用 Optional API,并且与三元运算符解决方案相比,没有空指针异常的机会(就像您没有注意并搞砸了操作数的顺序一样)。它还可以使用上界通配符而不需要
SuppressWarnings("unchecked")
多亏了flatMap
的签名,所以你可以获得Stream<T>
的任何元素集合T
的亚型。