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

代码解析:

  1. 使用 empWeightLevelGroup.entrySet().stream() 获取 empWeightLevelGroup 的键值对集合,并转换为 Stream。
  2. 使用 Collectors.toMap 将 Stream 收集到一个新的 Map 中,该 Map 的 key 为 empWeightLevelGroup 的 key,value 为一个新的 Map。
  3. 使用 entry.getValue().stream() 获取 empWeightLevelGroup 的 value,即 SuggestedLevelExportDTO 对象列表,并转换为 Stream。
  4. 使用 Collectors.groupingBySuggestedLevelExportDTO 对象列表根据 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 可以方便地对集合进行操作,并计算员工和级别对应建议等级数量,最终得到一个易于理解和分析的结果。

Java 使用 Stream 计算员工和级别对应建议等级数量

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

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