Java 使用 Stream 计算员工和级别对应建议等级数量
使用 Java Stream 计算员工和级别对应建议等级数量
本文将介绍如何使用 Java Stream API 计算员工和级别对应建议等级数量。
前提条件:
假设我们已经有一个 Map<String, List<SuggestedLevelExportDTO>>,名为 empWeightLevelGroup,其中 key 是 '员工编号-级别名称',value 是 SuggestedLevelExportDTO 对象列表。SuggestedLevelExportDTO 对象包含员工编号、员工名称、部门名称、权重组名称、权重级别名称以及建议等级等信息。
代码实现:
Map<String, Map<String, Long>> suggestedLevelCountByEmpAndLevel = empWeightLevelGroup.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream()
.collect(Collectors.groupingBy(SuggestedLevelExportDTO::getSuggestedLevel, Collectors.counting()))));
代码解析:
- 使用
empWeightLevelGroup.entrySet().stream()获取empWeightLevelGroup的键值对集合,并转换为 Stream。 - 使用
Collectors.toMap将 Stream 收集到一个新的 Map 中,该 Map 的 key 为empWeightLevelGroup的 key,value 为一个新的 Map。 - 使用
entry.getValue().stream()获取empWeightLevelGroup的 value,即SuggestedLevelExportDTO对象列表,并转换为 Stream。 - 使用
Collectors.groupingBy将SuggestedLevelExportDTO对象列表根据getSuggestedLevel()方法的结果进行分组,并使用Collectors.counting()统计每个建议等级出现的次数。
最终结果:
最终得到的 Map<String, Map<String, Long>> 结构如下:
{
'empCode1-levelName1': {
'suggestedLevel1': count1,
'suggestedLevel2': count2,
...
},
'empCode1-levelName2': {
'suggestedLevel1': count1,
'suggestedLevel2': count2,
...
},
...
}
其中,'empCode1' 表示员工编号,'levelName1' 表示级别名称,'suggestedLevel1' 表示建议等级,count1 表示该建议等级的数量。
总结:
使用 Java Stream API 可以方便地对集合进行操作,并计算员工和级别对应建议等级数量,最终得到一个易于理解和分析的结果。
原文地址: https://www.cveoy.top/t/topic/qAhS 著作权归作者所有。请勿转载和采集!