Java8中stream操作list时常见的一个错误:
排查原因:
定位到代码中发现从数据查询是存在数据的
排查stream前对象为null的情况,那问题只能出现在toMap这里了
我们需要知道toMap是怎么帮我们封装数据的,先搞明白toMap的原理,点击源码可以看到他并不是通过map中的put方法封装数据,而是使用的merge,那么merge又是个什么东西呢???
接着往下看,看到这先别着急研究,源码上面都有相关注释
查看当前方法上面的注释信息,在注释这里看到一个关键的词NullPointerException,这不就是我们出现的问题吗?往后看后面的解释,在注释就明确说了,key值和value值都不能为null。
最后我们只需去数据库验证当前查询出的数据是否存在为null的情况
通过对应sql,从数据库查询结果看有条数据值为null,因此在toMap的时候报错
解决方式:
1、如果这条数据是垃圾数据,直接删掉就好了
2、在使用toMap前过滤数据,可以使用stream的filter把空值过滤掉,或者使用removeIf