list为null,但是list.size() = 1解决方案

今天写代码遇到一个很奇怪的问题,那就是我使用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())

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

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

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
引用\[1\]:在目标检测服务中,使用yolov7模型通过flask打包成预测服务API。训练时,输入的图像大小为1280。如果输入的预测图片大小大于1280,则预测成功;如果小于1280,则会报错RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 27 but got size。根据错误提示,推测问题出在图像处理过程中的resize操作上,具体是在以下代码行出错:pred = self.model(img, augment=self.augment)\[0\]。完整的错误提示如下: RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 48 but got size 47 for tensor number 1 in the list. 引用\[2\]中给出了改造base64_to_image函数的代码,该函数用于将base64格式的图片转换为图片对象。在这个函数中,使用了cv2库对图片进行解码和处理。引用\[3\]分析了问题的原因,发现是在pading过程中少给了一个参数stride,导致小图片在pading过程中像素错误,从而导致了dimension错误。 解决方案是在图像处理过程中正确设置stride参数,确保图片的像素处理正确。 #### 引用[.reference_title] - *1* *2* *3* [记录解决RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 27 but got ...](https://blog.csdn.net/h363924219/article/details/127778425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值