使用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());

解释:

  1. 使用levelSubtotal.entrySet().stream()获取levelSubtotal的键值对集合,并将其转换为Stream流。
  2. 使用flatMap操作符对每个键值对的scoreItemLevelSubtotal进行扁平化处理,将scoreItemLevelSubtotal中的每个键值对再次转换为Stream流。
  3. 再次使用flatMap操作符对每个bigDecimals列表进行扁平化处理,将列表中的每个BigDecimal转换为Stream流。
  4. 使用map操作符创建ComputeResultExportDTO对象并设置其属性。
  5. 使用collect(Collectors.toList())将Stream流收集到一个List中。

优点:

  • 代码更加简洁易读,避免了嵌套循环的复杂结构。
  • 使用Stream流可以提高代码的可读性和可维护性。
  • Stream流提供了丰富的操作符,可以方便地对数据进行各种操作。

注意:

  • flatMap操作符用于将一个Stream流中的元素转换为多个Stream流,并将这些Stream流合并成一个新的Stream流。
  • map操作符用于将一个Stream流中的元素映射为另一个类型的新元素。
  • collect(Collectors.toList())操作符用于将Stream流中的元素收集到一个List中。
使用Stream流优化ComputeResultExportDTO列表生成

原文地址: https://www.cveoy.top/t/topic/qDFy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录