优化这段代码: List<BaseDataResponse> baseDataList = businessTypeService.findByItfAppCode("xxx").stream().map(x -> new BaseDataResponese(x.getId(), x.getName())).collect(Collectors.toList()); Short id = 6; BaseDataResponse baseDataResponse = baseDataList.stream().filter(x -> id.equals(x.getValue))).findAny().orElse(null); if (baseDataResponse == null) { BusinessTypeInfo businessType = businessTypeService.getBusinessTypeById(id); baseDataList.add(new BaseDataResponese(x.getId(), x.getName())); } return baseDataList;
时间: 2024-03-20 12:40:40 浏览: 23
可以优化的地方有:
1. 首先,可以将 `businessTypeService.findByItfAppCode("xxx")` 的结果缓存起来,避免每次调用都查询数据库。具体可以使用 Spring Cache 或者自己实现一个简单的缓存。
2. 在使用 `filter` 方法时,可以使用方法引用 `x -> id.equals(x.getValue())` 改为 `id::equals`,简化代码。
3. 在判断 `baseDataResponse` 是否为 null 时,可以使用 `ifPresentOrElse` 方法,代码更简洁。
优化后的代码如下:
```
@Cacheable("baseData")
public List<BaseDataResponse> getBaseDataList() {
List<BaseDataResponse> baseDataList = businessTypeService.findByItfAppCode("xxx")
.stream()
.map(x -> new BaseDataResponse(x.getId(), x.getName()))
.collect(Collectors.toList());
Short id = 6;
baseDataList.stream()
.filter(id::equals)
.findAny()
.ifPresentOrElse(
baseDataResponse -> {},
() -> {
BusinessTypeInfo businessType = businessTypeService.getBusinessTypeById(id);
baseDataList.add(new BaseDataResponse(businessType.getId(), businessType.getName()));
}
);
return baseDataList;
}
```
注意,这里使用了 `ifPresentOrElse` 方法,需要 Java 9 或以上版本的支持。如果使用的是低版本的 Java,可以将其改为传统的 if-else 语句。