因为使用.forEach()方法时,无法在内部修改外部变量suggestedLevelVOS,所以需要使用.collect(Collectors.toList())方法来收集数据并返回一个新的List。

以下是将for循环转换为Stream流的示例代码:

final List<SuggestedLevelVO> suggestedLevelVOS = empCodeAndNameDeptNameGroup.keySet().stream()
    .flatMap(empCodeAndNameDeptName -> {
        // 获取到员工所对应的建议等级数据
        final List<SuggestedLevelExportDTO> suggestedLevelExportDTOS = empCodeAndNameDeptNameGroup.get(empCodeAndNameDeptName);

        // empCodeAndName格式为 :”员工编号-员工名称-部门名称“
        final String[] empCodeAndDeptNameNames = StringUtils.split(empCodeAndNameDeptName, Constants.SPLIT_FLAG);

        // 获取不同建议等级所对应的评价总人数
        final Map<String, Long> suggestedLevelGroup = suggestedLevelExportDTOS.stream()
            .collect(Collectors.groupingBy(SuggestedLevelExportDTO::getSuggestedLevel, Collectors.counting()));

        // 获取所有建议等级评价总人数
        final Long otherWightLeveSuggestedLevelSum = MapUtils.emptyIfNull(suggestedLevelGroup).values().stream()
            .mapToLong(Long::longValue)
            .sum();

        final SuggestedLevelVO otherWightLeveSuggestedLevelVO = createSuggestedLevelVO(empCodeAndDeptNameNames, suggestedLevelGroup, otherWightLeveSuggestedLevelSum, StringUtils.EMPTY);

        // 权重级别名称为key,所对应的建议等级数据为value的map
        final Map<String, List<SuggestedLevelExportDTO>> wightLevelNameGroup = suggestedLevelExportDTOS.stream()
            .collect(Collectors.groupingBy(SuggestedLevelExportDTO::getWightLevelName));

        final List<SuggestedLevelVO> suggestedLevelVOs = MapUtils.emptyIfNull(wightLevelNameGroup).keySet().stream()
            .map(wightLevelName -> getSuggestedLevelVO(empCodeAndDeptNameNames, wightLevelNameGroup, wightLevelName))
            .collect(Collectors.toList());

        return Stream.concat(Stream.of(otherWightLeveSuggestedLevelVO), suggestedLevelVOs.stream());
    })
    .collect(Collectors.toList());

return suggestedLevelVOS;

请注意,在使用.flatMap()方法时,我们将otherWightLeveSuggestedLevelVOsuggestedLevelVOs流合并为一个流,并使用.collect(Collectors.toList())方法收集结果

用来添加需要导出excel表格的数据 final ListSuggestedLevelVO suggestedLevelVOS = new ArrayList; for final String empCodeAndNameDeptName empCodeAndNameDeptNameGroupkeySet 获取到员工所对应的建议等级数据

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

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