使用 Stream 流代替 for 循环遍历集合 - Java 代码示例
可以使用 forEach 方法替代 for 循环来遍历 stream 流中的元素。下面是使用 forEach 方法重写上述代码的示例:
empCodeAndNameDeptNameGroup.keySet().forEach(empCodeAndNameDeptName -> {
// 获取到员工所对应的建议等级数据
List<SuggestedLevelExportDTO> suggestedLevelExportDTOS = empCodeAndNameDeptNameGroup.get(empCodeAndNameDeptName);
// empCodeAndName格式为 :'员工编号-员工名称-部门名称'
String[] empCodeAndDeptNameNames = StringUtils.split(empCodeAndNameDeptName, Constants.SPLIT_FLAG);
// 获取不同建议等级所对应的评价总人数
Map<String, Long> suggestedLevelGroup = suggestedLevelExportDTOS.stream()
.collect(Collectors.groupingBy(SuggestedLevelExportDTO::getSuggestedLevel, Collectors.counting()));
// 获取所有建议等级评价总人数
Long otherWightLeveSuggestedLevelSum = MapUtils.emptyIfNull(suggestedLevelGroup).values().stream()
.mapToLong(Long::longValue)
.sum();
SuggestedLevelVO otherWightLeveSuggestedLevelVO = createSuggestedLevelVO(empCodeAndDeptNameNames, suggestedLevelGroup, otherWightLeveSuggestedLevelSum, StringUtils.EMPTY);
suggestedLevelVOS.add(otherWightLeveSuggestedLevelVO);
// 权重级别名称为key,所对应的建议等级数据为value的map
Map<String, List<SuggestedLevelExportDTO>> wightLevelNameGroup = suggestedLevelExportDTOS.stream()
.collect(Collectors.groupingBy(SuggestedLevelExportDTO::getWightLevelName));
List<SuggestedLevelVO> suggestedLevelVOs = MapUtils.emptyIfNull(wightLevelNameGroup).keySet().stream()
.map(wightLevelName -> getSuggestedLevelVO(empCodeAndDeptNameNames, wightLevelNameGroup, wightLevelName))
.collect(Collectors.toList());
suggestedLevelVOS.addAll(suggestedLevelVOs);
});
通过使用 forEach 方法,我们能够以更简洁、更易读的方式来遍历 Stream 流中的元素,并进行相应的操作。这不仅提高了代码的可读性,也使得代码更具可维护性。
原文地址: https://www.cveoy.top/t/topic/qBVh 著作权归作者所有。请勿转载和采集!