list转成部门组织机构树

一二级部门混合在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": "一级二"
  }
]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只IT攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值