我们应该如何管理空值的jdk8流
我知道这个主题可能有点,因为JDK8尚未发布(反正现在还没有发布),但我正在阅读一些关于Lambda表达式的文章,特别是与称为Stream的新集合API相关的部分。in advance
以下是Java杂志文章中给出的示例(它是一种水獭种群算法..):
Set<Otter> otters = getOtters();
System.out.println(otters.stream()
.filter(o -> !o.isWild())
.map(o -> o.getKeeper())
.filter(k -> k.isFemale())
.into(new ArrayList<>())
.size());
我的问题是,如果在 Set 内部迭代的中间,其中一个水獭为空,会发生什么情况?
我希望抛出一个NullPointerException,但也许我仍然停留在以前的开发范式(非功能性)中,有人可以启发我如何处理这个问题吗?
如果这真的抛出了一个NullPointerException,我发现这个功能非常危险,只能按如下方式使用:
- 开发人员确保没有空值(可能使用以前的.filter(o -> o != null))
- 开发人员确保应用程序永远不会生成空水獭或特殊的NullOtter对象来处理。
什么是最佳选择,或任何其他选择?