开发避坑指南(39):Java List全null元素引发的空判断无效处理方案
问题描述
使用java8 stream()函数提取list中的某个元素并做去重处理,发现提取的结果list不为空,且size=1,但是里面的元素都是null,如图所示:
相关代码
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)) {//执行其他逻辑
}