java 高效列转行,java 列转行「建议收藏」

java 高效列转行,java 列转行「建议收藏」一个员工在多个部门内 一个部门有多个员工 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

一个员工在多个部门内,一个部门有多个员工

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);

编程小号
上一篇 2025-03-06 21:40
下一篇 2025-03-21 20:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/146712.html