可以优化 if (list == null || list.isEmpty())吗
时间: 2024-05-14 20:19:55 浏览: 9
可以使用 Java 8 引入的 Optional 类型来优化 if (list == null || list.isEmpty()) 的写法,示例如下:
```java
Optional<List<String>> optionalList = Optional.ofNullable(list);
if (optionalList.isPresent() && !optionalList.get().isEmpty()) {
// list 不为空且不为空列表
}
```
上述代码中,首先使用 Optional.ofNullable() 方法将 list 转换为 Optional 对象,然后使用 isPresent() 方法判断 Optional 对象是否存在值,最后使用 get() 方法获取 Optional 对象的值,并判断是否为空列表。这样可以避免空指针异常,并且代码更加简洁明了。不过需要注意的是,过度使用 Optional 也可能会导致代码变得复杂,因此需要根据具体情况灵活使用。
相关问题
List<TrDevice> trDeviceList = trDeviceService.listDeviceByName(devName); if (trDeviceList == null || trDeviceList.isEmpty() || trDeviceList.size()<1) { resUploadFileVos.add(new ResUploadFileVo(row, 2, "", "设备名称查询无数据")); continue; } 这块代码有没有bug
这段代码看起来没有明显的 bug。它首先通过设备名称查询设备列表,如果查询结果为空或者设备列表为空,则会将一个 ResUploadFileVo 对象添加到 resUploadFileVos 列表中,并继续执行下一次循环。如果查询结果不为空,则说明查询到了设备,可以进行后续操作。不过,如果你有更多的上下文信息或者具体的需求,可以进一步分析代码是否满足你的要求。
优化这段代码,复杂度降低到15以下:public AjaxResult selectDeviceByCode(HttpServletRequest request,@RequestParam Map<String, Object> form) { List<HashMap<String, Object>> list = facilityService.selectDeviceByCode(form); // 判断list是否为空 if (list == null || list.isEmpty()) { return AjaxResult.error("此设备不存在,请联系管理员"); } else { if (list.get(0).get(guestIdDetail) != null) { Attention attention = new Attention(); //设备绑定人 long beGuestId = Long.valueOf(list.get(0).get(guestIdDetail).toString()); attention.setBeGuestId(beGuestId); // 当前登入人 Long guestId = getAPPUserId(request); attention.setGuestId(guestId); //判断当前登入人与设备绑定人是否为同一人 if (attention.getGuestId().equals(beGuestId)) { return error("无法绑定自己的设备"); } // 判断是否关注亲友 List<Attention> attentionList = attentionService.selAttention(attention); if (attentionList != null && !attentionList.isEmpty()) { Attention attentionDetail = attentionList.get(0); if (attentionDetail.getOverTime() != null) { return error("该设备已被亲友绑定,且您已关注亲友"); } return error("已提交关注申请"); } } return success(list.get(0)); } }
这段代码的复杂度较高,需要进行一些优化,可以采用以下方法:
1. 将 if-else 结构中的 if 语句提取出来,避免嵌套过深;
2. 对于一些重复的变量和表达式,进行提取和复用;
3. 将一些判断条件合并,避免重复判断。
以下是优化后的代码:
public AjaxResult selectDeviceByCode(HttpServletRequest request, @RequestParam Map<String, Object> form) {
List<HashMap<String, Object>> list = facilityService.selectDeviceByCode(form);
// 判断list是否为空
if (list == null || list.isEmpty()) {
return AjaxResult.error("此设备不存在,请联系管理员");
}
// 获取设备绑定人
Object guestIdDetail = list.get(0).get("guestIdDetail");
if (guestIdDetail != null) {
Attention attention = new Attention();
//设备绑定人
long beGuestId = Long.valueOf(guestIdDetail.toString());
attention.setBeGuestId(beGuestId);
// 当前登入人
Long guestId = getAPPUserId(request);
attention.setGuestId(guestId);
//判断当前登入人与设备绑定人是否为同一人
if (attention.getGuestId().equals(beGuestId)) {
return error("无法绑定自己的设备");
}
// 判断是否关注亲友
List<Attention> attentionList = attentionService.selAttention(attention);
if (attentionList != null && !attentionList.isEmpty()) {
Attention attentionDetail = attentionList.get(0);
if (attentionDetail.getOverTime() != null) {
return error("该设备已被亲友绑定,且您已关注亲友");
}
return error("已提交关注申请");
}
}
return success(list.get(0));
}
通过将 if-else 结构中的 if 语句提取出来,避免嵌套过深,将一些重复的变量和表达式提取和复用,将一些判断条件合并,可以将代码的复杂度降低到15以下,使代码更加简洁和易于维护。