我知道这个主题可能有点in advance
,因为 JDK8 尚未发布(而且现在还没有发布..),但我正在阅读一些关于 Lambda 表达式的文章,特别是与称为 Stream 的新集合 API 相关的部分。
这是Java Magazine 文章中给出的示例(它是一种水獭种群算法..):
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))
- 开发人员确保应用程序永远不会生成 null otter 或特殊的 NullOtter 对象来处理。
什么是最好的选择,或任何其他选择?