if(!CollectionUtils.isEmpty(assessList)){ List<Assess> dataList = new ArrayList<>(); for(Assess assess : assessList){ String directRater = assess.getDirectRater(); String deptRater = assess.getDeptRater(); if(!StringUtil.isEmpty(directRater)){ raters.add(directRater); } if(!StringUtil.isEmpty(deptRater)){ raters.add(deptRater); } //更新初始状态:提交 assess.setState(SUBMIT_ASSESS_STATE); dataList.add(assess); } saveOrUpdateBatch(dataList); }如何优化这段代码
时间: 2024-01-28 08:02:45 浏览: 24
这段代码的优化可以从以下几个方面考虑:
1. 可以使用Stream API代替for循环,使代码更简洁。例如:
```java
if (!CollectionUtils.isEmpty(assessList)) {
List<Assess> dataList = assessList.stream()
.peek(assess -> {
String directRater = assess.getDirectRater();
String deptRater = assess.getDeptRater();
if (!StringUtil.isEmpty(directRater)) {
raters.add(directRater);
}
if (!StringUtil.isEmpty(deptRater)) {
raters.add(deptRater);
}
assess.setState(SUBMIT_ASSESS_STATE);
})
.collect(Collectors.toList());
saveOrUpdateBatch(dataList);
}
```
2. 可以使用lambda表达式简化处理直接评估人和部门评估人的逻辑。例如:
```java
if (!CollectionUtils.isEmpty(assessList)) {
List<Assess> dataList = assessList.stream()
.peek(assess -> {
Stream.of(assess.getDirectRater(), assess.getDeptRater())
.filter(StringUtils::isNotEmpty)
.forEach(raters::add);
assess.setState(SUBMIT_ASSESS_STATE);
})
.collect(Collectors.toList());
saveOrUpdateBatch(dataList);
}
```
3. 如果raters集合不需要保留,可以使用flatMap方法将直接评估人和部门评估人合并成一个Stream,然后直接统计评估人数。例如:
```java
long count = assessList.stream()
.flatMap(assess -> Stream.of(assess.getDirectRater(), assess.getDeptRater()))
.filter(StringUtils::isNotEmpty)
.distinct()
.count();
```
以上是一些可以优化这段代码的方法,具体的实现方式取决于代码的实际需求和环境。