一二级部门混合在list中,如何变成组织机构树
DeptUserInfoBO.java
/**
* 部门成员信息表
*/
@data
public class DeptUserInfoBO{
private Long id;
private Integer pageNo = 1;
private Integer pageSize = 10;
private Integer groupType;//机构等级 一级机构1,二级机构2
private String groupCode;//结构编码
private String parentGroupCode;//父机构编码
private String groupName;//部门名称
private List<DeptUserInfoBO> children;
}
测试类:
public static void main(String[] args) {
List<DeptUserInfoBO> depts = new ArrayList<>();
DeptUserInfoBO a = new DeptUserInfoBO();
a.setGroupCode("111");
a.setId(1L);
a.setGroupName("一级一");
a.setParentGroupCode("0");
a.setGroupType(1);
depts.add(a);
DeptUserInfoBO a2 = new DeptUserInfoBO();
a2.setGroupCode("222");
a2.setId(2L);
a2.setGroupName("一级二");
a2.setGroupType(1);
a2.setParentGroupCode("0");
depts.add(a2);
DeptUserInfoBO b = new DeptUserInfoBO();
b.setGroupCode("4444");
b.setId(4L);
b.setGroupName("二级一");
b.setParentGroupCode("111");
b.setGroupType(2);
depts.add(b);
DeptUserInfoBO b2 = new DeptUserInfoBO();
b2.setGroupCode("555");
b2.setId(5L);
b2.setGroupName("二级二");
b2.setParentGroupCode("222");
b2.setGroupType(2);
depts.add(b2);
DeptUserInfoBO b3 = new DeptUserInfoBO();
b3.setGroupCode("666");
b3.setId(6L);
b3.setGroupName("二级三");
b3.setParentGroupCode("222");
b3.setGroupType(2);
depts.add(b3);
List<DeptUserInfoBO> collect = depts.stream()
.filter((c) -> c.getGroupType() == 1)
// 与map功能一致,对list中每一项循环转化,封装childrenList
.peek((c) -> c.setChildren(getChildrenList(c.getGroupCode(), depts)))
//排序操作
// .sorted(Comparator.comparingInt(DeptUserInfoBO::getTotal))
.collect(Collectors.toList());
}
/**
* 获取二级部门集合
*/
public static List<DeptUserInfoBO> getChildrenList(String groupCode, List<DeptUserInfoBO> depts) {
return depts.stream()
.filter((c) -> groupCode.equals(c.getParentGroupCode()))
.peek((c) -> c.setChildren(getChildrenList(c.getGroupCode(), depts)))
// .sorted(Comparator.comparingInt(DeptUserInfoBO::getTotal))
.collect(Collectors.toList());
}
运行结果:
[
{
"groupType": 1,
"pageSize": 2,
"parentGroupCode": "0",
"children": [
{
"groupType": 2,
"pageSize": 2,
"parentGroupCode": "111",
"children": [
],
"pageNo": 1,
"id": 4,
"groupCode": "4444",
"groupName": "二级一"
}
],
"pageNo": 1,
"id": 1,
"groupCode": "111",
"groupName": "一级一"
},
{
"groupType": 1,
"pageSize": 2,
"parentGroupCode": "0",
"children": [
{
"groupType": 2,
"pageSize": 2,
"parentGroupCode": "222",
"children": [
],
"pageNo": 1,
"id": 5,
"groupCode": "555",
"groupName": "二级二"
},
{
"groupType": 2,
"pageSize": 2,
"parentGroupCode": "222",
"children": [
],
"pageNo": 1,
"id": 6,
"groupCode": "666",
"groupName": "二级三"
}
],
"pageNo": 1,
"id": 2,
"groupCode": "222",
"groupName": "一级二"
}
]