Java stream流toMap使用过程中空指针问题

Java8中stream操作list时常见的一个错误:

Java stream流toMap使用过程中空指针问题_第1张图片

排查原因:

定位到代码中发现从数据查询是存在数据的

排查stream前对象为null的情况,那问题只能出现在toMap这里了

我们需要知道toMap是怎么帮我们封装数据的,先搞明白toMap的原理,点击源码可以看到他并不是通过map中的put方法封装数据,而是使用的merge,那么merge又是个什么东西呢???

Java stream流toMap使用过程中空指针问题_第2张图片

接着往下看,看到这先别着急研究,源码上面都有相关注释

Java stream流toMap使用过程中空指针问题_第3张图片

查看当前方法上面的注释信息,在注释这里看到一个关键的词NullPointerException,这不就是我们出现的问题吗?往后看后面的解释,在注释就明确说了,key值和value值都不能为null

Java stream流toMap使用过程中空指针问题_第4张图片

最后我们只需去数据库验证当前查询出的数据是否存在为null的情况

Java stream流toMap使用过程中空指针问题_第5张图片

通过对应sql,从数据库查询结果看有条数据值为null,因此在toMap的时候报错

解决方式:

1、如果这条数据是垃圾数据,直接删掉就好了

2、在使用toMap前过滤数据,可以使用stream的filter把空值过滤掉,或者使用removeIf

你可能感兴趣的:(BUG追踪,java,开发语言)