我知道这个话题可能有点in advance
因为 JDK8 尚未发布(至少现在还没有发布......),但我正在阅读一些有关 Lambda 表达式的文章,特别是与称为 Stream 的新集合 API 相关的部分。
这是中给出的示例Java 杂志文章 http://www.oraclejavamagazine-digital.com/javamagazine_open/20130304#pg42(这是一个水獭种群算法..):
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 对象来处理。
最好的选择是什么,或者任何其他选择?
虽然答案是100%正确的,但还是有一个改进的小建议null
列表本身的案例处理Optional http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html:
List<String> listOfStuffFiltered = Optional.ofNullable(listOfStuff)
.orElseGet(Collections::emptyList)
.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
那个部分Optional.ofNullable(listOfStuff).orElseGet(Collections::emptyList)
将使您能够很好地处理案件listOfStuff
为 null 并返回一个空列表,而不是因 NullPointerException 失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)