List size为1但是内容为null处理方法 您所在的位置:网站首页 stream处理集合没值报null List size为1但是内容为null处理方法

List size为1但是内容为null处理方法

2024-07-08 22:50| 来源: 网络整理| 查看: 265

转载:https://blog.csdn.net/xlj_bear/article/details/109228699

我的问题跟这篇文章差不多,是前端传过来数组size为1,但是为空对象。

postman参数如下:

以下为转载文章处理方法:

今天写代码遇到一个很奇怪的问题,那就是我使用SQL查询的结果为null,当把结果用一个list接收的时候,list.size() = 1,然后内部处理的时候出现了NPE,可我明明已经做了非空校验啊java方法在这里插入图片描述 然后百思不得其解,先使用了一个较笨的方案。。。

解决方案1:java代码: if (!list.isEmpty()) { if (list.get(0) != null) { //todo } }

但是这种方式,不太靠谱,为什么呢?因为如果你的list中包含多个数据,而你不知道他给了你的null的数据,毕竟list.add(null)可以有多次执行的,list.size()也会逐渐提升。

那到底是出现了什么问题呢?难道是查询的问题?于是乎我做了这么一个实验。

第一步:执行SQL

在这里插入图片描述 可以看出没有任何结果。然后根据左连接的特性,查询左表的所有数据和右表的匹配的数据。

然后猜想,是不是因为一个巧合,这是一条非空的数据,只是恰巧我要查询的都是空的呢? 然后我补齐查询,再试一次。在这里插入图片描述 可以看出还真是这样,然后对于我们来说,这条数据是空的,也仅仅是因为我们要查询的字段是空的,但是其他数据都不是空的,所以他把这个数据数据库并没有当作一条空数据来看,还是映射给了我们的对象,导致List的内部有一个空对象,因为list内部是可以支持null的,所以以后在遇到这种问题,先从源头考虑,上面的java代码,纯属搞笑。在这里插入图片描述 但是这种方式还有问题,你不知道这个集合里面到底有多有条null,那我们怎么办呢?还有一招究极解决办法,我们可以使用java8的Stream流达到直接解决达到目的:

list.parallelStream().filter(Objects::nonNull).collect(Collectors.toList())

最后要讲的一点就是,每一个结果的出现都不是偶然,一定是有自己的含义的,我们不能凭借自己的想象来解决问题。

真高兴,又学会了一点奇怪的知识。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有