目录

开发避坑指南39Java-List全null元素引发的空判断无效处理方案

开发避坑指南(39):Java List全null元素引发的空判断无效处理方案

问题描述

使用java8 stream()函数提取list中的某个元素并做去重处理,发现提取的结果list不为空,且size=1,但是里面的元素都是null,如图所示:
https://i-blog.csdnimg.cn/direct/3e14cfa534404a7c9b2ad9f7f27227c9.png

相关代码

List<String> orderOidList = orderList.stream().map(OrderInfo::getOrderOid).                      collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
if (null != orderOidList && !orderOidList.isEmpty()) {
    //执行其他逻辑
}

问题分析

由于list中的orderOid字段都是null,if (null != orderOidList && !orderOidList.isEmpty())这样的判断是无效的。需要提取list中的字段时过滤null的字段。或者使用Stream API的allMatch方法可以快速判断列表中所有元素是否为null。

解决办法

(1)过滤null字段。代码如下:

List<String> orderOidList = orderList.stream().map(OrderInfo::getOrderOid).filter(Objects::nonNull).                     collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
if (null != orderOidList && !orderOidList.isEmpty()) {
    //执行其他逻辑
}

(2)使用Stream API的allMatch方法判断。代码如下:

if (null != orderOidList && orderOidList.stream().allMatch(Objects::nonNull)) {
    //执行其他逻辑
}