使用Stream流优化ComputeResultExportDTO列表生成
使用Stream流优化ComputeResultExportDTO列表生成
原始代码使用了嵌套循环来生成ComputeResultExportDTO列表,可以使用Stream流进行优化,代码更加简洁易读。
原始代码:
final List<ComputeResultExportDTO> computeResultExportDTOS = new ArrayList<>();
for (final String empNameAndCode : levelSubtotal.keySet()) {
final Map<String, List<BigDecimal>> scoreItemLevelSubtotal = levelSubtotal.get(empNameAndCode);
for (final String levelName : scoreItemLevelSubtotal.keySet()) {
final String id = IdUtil.fastUUID();
final List<BigDecimal> bigDecimals = scoreItemLevelSubtotal.get(levelName);
for (final BigDecimal bigDecimal : bigDecimals) {
final ComputeResultExportDTO computeResultExportDTO = new ComputeResultExportDTO();
computeResultExportDTO.setExamineEvaluationId(id);
final String[] empNameAndCodes = StringUtils.split(empNameAndCode, Constants.SPLIT_FLAG);
computeResultExportDTO.setEmpCode(empNameAndCodes[1]);
computeResultExportDTO.setEmpName(empNameAndCodes[0]);
computeResultExportDTO.setLevelName('级别小计');
computeResultExportDTO.setLevelGroup(levelName);
computeResultExportDTOS.add(computeResultExportDTO);
}
}
}
return computeResultExportDTOS;
使用Stream流优化后的代码:
return levelSubtotal.entrySet().stream()
.flatMap(entry -> entry.getValue().entrySet().stream()
.flatMap(innerEntry -> innerEntry.getValue().stream()
.map(bigDecimal -> {
final ComputeResultExportDTO computeResultExportDTO = new ComputeResultExportDTO();
computeResultExportDTO.setExamineEvaluationId(IdUtil.fastUUID());
final String[] empNameAndCodes = StringUtils.split(entry.getKey(), Constants.SPLIT_FLAG);
computeResultExportDTO.setEmpCode(empNameAndCodes[1]);
computeResultExportDTO.setEmpName(empNameAndCodes[0]);
computeResultExportDTO.setLevelName('级别小计');
computeResultExportDTO.setLevelGroup(innerEntry.getKey());
return computeResultExportDTO;
})
)
)
.collect(Collectors.toList());
解释:
- 使用
levelSubtotal.entrySet().stream()获取levelSubtotal的键值对集合,并将其转换为Stream流。 - 使用
flatMap操作符对每个键值对的scoreItemLevelSubtotal进行扁平化处理,将scoreItemLevelSubtotal中的每个键值对再次转换为Stream流。 - 再次使用
flatMap操作符对每个bigDecimals列表进行扁平化处理,将列表中的每个BigDecimal转换为Stream流。 - 使用
map操作符创建ComputeResultExportDTO对象并设置其属性。 - 使用
collect(Collectors.toList())将Stream流收集到一个List中。
优点:
- 代码更加简洁易读,避免了嵌套循环的复杂结构。
- 使用Stream流可以提高代码的可读性和可维护性。
- Stream流提供了丰富的操作符,可以方便地对数据进行各种操作。
注意:
flatMap操作符用于将一个Stream流中的元素转换为多个Stream流,并将这些Stream流合并成一个新的Stream流。map操作符用于将一个Stream流中的元素映射为另一个类型的新元素。collect(Collectors.toList())操作符用于将Stream流中的元素收集到一个List中。
原文地址: https://www.cveoy.top/t/topic/qDFy 著作权归作者所有。请勿转载和采集!