如何用Java 8极简代码将员工列表转为职级分组的ID映射表
解决方法:一行Java 8 Stream代码搞定分组转换
这需求用Java 8的Stream API简直是量身定做,代码极简还清晰,直接看核心实现:
// 前提:Employees类需提供getId()获取员工ID、getGrade()获取职级的getter方法 Map<String, List<String>> dataMap = lt.stream() .collect(Collectors.groupingBy( Employees::getGrade, // 按职级Grade作为Map的键 Collectors.mapping(Employees::getId, Collectors.toList()) // 将员工对象转为ID后收集为列表 ));
代码拆解说明:
lt.stream():把原ArrayList转换成Stream流,开启函数式操作模式。- 核心的
collect方法搭配Collectors.groupingBy实现分组:- 第一个参数
Employees::getGrade是分组规则,指定用员工的职级作为Map的key。这里要确保你的Employees类有对应的getGrade()方法返回职级字符串(比如"Grade1")。 - 第二个参数是下游收集器:
Collectors.mapping负责把每个Employees对象转换为对应的员工ID(通过Employees::getId方法引用),最后用Collectors.toList()把同一职级下的所有ID收集成List,作为Map的value。
- 第一个参数
小提示:
如果你的Employees类中,获取员工ID或职级的方法名不是getId()/getGrade(),直接替换成实际的方法名即可(比如如果职级属性的getter叫getEmployeeLevel(),就改成Employees::getEmployeeLevel)。
测试验证的话,生成的dataMap结构完全匹配你的需求:
- "Grade1"对应列表
["111", "666"] - "Grade2"对应列表
["222", "333"] - "Grade3"对应列表
["444", "555"]
内容的提问来源于stack exchange,提问作者rand
相关产品推荐
相关产品推荐

