java - 尽管 Optional<> 出现空指针异常
问题描述
我有:
List<Optional<MyObject>> myList;
该列表是通过从文件中读取来填充的。文件读取完成后,我会检查空列表:
if(myList.size() == 0){//}
然后执行以下操作:
myList.stream()
.filter(Optional::isPresent)
.map(i → i.orElse(new MyObject(“adventureBook”, 20))
.collect(groupingBy(MyObject::getBookType, TreeMap::new, mapping(MyObject::getBookPrice, toList())));
我有大约 350k MyObject 文件要读取,300k 文件可以正常读取,但是当我尝试读取整批 c.350k 文件时,它会在 collect() 上引发空指针异常。
尽管包裹在 Optional<> 并检查 Optional::isPresent、Optional::orElse 等仍然有一个空对象设法偷偷溜过,并且考虑到我有这么多的文件,什么是最好的尝试和缩小错误文件的范围?谢谢
编辑:添加堆栈跟踪
Exception in thread "main" java.lang.NullPointerException
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.mypackage.MyObject.main(MyObject.java:108)
解决方案
那么可能是非null 中的属性之一MyObject
是null 吗?您确实在做filter(Optional::isPresent)
,但这并不意味着字段本身不为空。MyObject::getBookType
或者MyObject::getBookPrice
很容易仍然为空。
推荐阅读
- reactjs - 为什么
- visual-studio - 为什么安装 Wear OS Intel x86 Atom 系统映像 v2 失败
- ionic-framework - Ionic 4 - 找不到管道
- ruby-on-rails - Rails 创建额外的创建动作并将新的重定向到它
- heroku - 向我的 graphql API 发起查询时出现网络错误
- python - 如何使用 NumPy 字符串格式化程序打印输出字符串取决于数组值的 NumPy 数组?
- python - 查找具有给定排名的所有固定长度子数组
- batch-file - 从文件夹背景上下文菜单运行 .bat 文件
- isabelle - 证明伊莎贝尔存在无限路径
- cypher - Bloodhound Cypher:否定 CanRDP