大家好,又见面了,我是你们的朋友全栈君。
一个员工在多个部门内,一个部门有多个员工
List ———–> Map>
1.部门类
public class Dept {
public Dept(String id) {
this.id = id;
}
private String id;
//省略get,set 方法
}
2.员工类
public class User {
public User(String id) {
this.id = id;
}
private String id;
private List deptList;
//省略get,set 方法
}
3: 测试类
public class TestDemo {
public static void main(String[] args) {
User user1 = new User(“员工1”);
User user2 = new User(“员工2”);
User user3 = new User(“员工3”);
Dept dept1 = new Dept(“部门1”);
Dept dept2 = new Dept(“部门2”);
ArrayList deptList = new ArrayList<>();
deptList.add(dept2);
deptList.add(dept1);
// 员工1 = 部门1,2
user1.setDeptList(deptList);
// 员工2 = 部门1
user2.setDeptList(Collections.singletonList(dept1));
// 员工3 = 部门1,2
user3.setDeptList(deptList);
ArrayList userList = new ArrayList<>();
userList.add(user3);
userList.add(user2);
userList.add(user1);
/* 转换成部门map应该为
* 部门1 = 员工1,2,3
* 部门2 = 员工1,3
*/
}
}
4.1我的实现:
先建一个组合类
public class UserComposite {
public UserComposite(User user, String deptId) {
this.user = user;
this.deptId = deptId;
}
private User user;
private String deptId;
//省略 get,set 方法
}
4.2: 实现代码
Map> map = userList.stream()
// 过滤空部门的数据
.filter(user -> user.getDeptList() != null && !user.getDeptList().isEmpty())
// 转换部门和员工的关系
.map(user-> user.getDeptList().stream().map(dept-> new UserComposite(user, dept.getId())).collect(Collectors.toList()))
// 合并流进行分组
.flatMap(List::stream).collect(Collectors.groupingBy(UserComposite::getDeptId, Collectors.mapping(UserComposite::getUser, Collectors.toList())));
System.out.println(map);
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148981.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...