递归快速获取机构树型图

一般组织架构都会有层级关系,根部门的parentId一般设置为null或者0等特殊字符,而次级部门及以下的parentId则指向他们父节点的id。

以此为基础,业务上经常会有查询整个组织架构层级关系的需求,返回对象中的children属性用来存储子机构的集合,从而形成树型结构。

这种情况一般使用递归写法,能快速完成需求。

1、获取所有根节点,根节点的集合就是最终返回对象的集合的元素数量size

2、设置根节点的子节点集合。

3、递归设置子节点的子节点集合。

java 复制代码
public R<List<BankBranchInfo>> getBankBranchInfo() {

        String sql = "select ORG_ID, ORG_NAME, PARENT_ID from auth_org WHERE TENANT_ID <> 100001 ";
        List<OrgEntity> listAll = beanCruder.selectList(OrgEntity.class, sql);

        List<BankBranchInfo> bankBranchInfos = new ArrayList<>();
        listAll.forEach(org -> {
            BankBranchInfo bankBranchInfo = new BankBranchInfo();
            bankBranchInfo.setId(String.valueOf(org.getOrgId()));
            bankBranchInfo.setBankName(org.getOrgName());
            bankBranchInfo.setParentId(org.getParentId() == null ? null : Long.valueOf(org.getParentId()));
            bankBranchInfos.add(bankBranchInfo);
        });
        //一级
        List<BankBranchInfo> rootList = bankBranchInfos.stream().filter(e -> e.getParentId() == null).collect(Collectors.toList());
        //其他级
        List<BankBranchInfo> other = bankBranchInfos.stream().filter(e -> e.getParentId() != null).collect(Collectors.toList());

        setTree(rootList, other);

        return R.ok(rootList, "查询完成");
    }



private void setTree(List<BankBranchInfo> children, List<BankBranchInfo> other) {
        children.forEach(root -> {
            List<BankBranchInfo> childrenList = new ArrayList<>();
            root.setBankBranchInfos(childrenList);
            //该级子级
            List<BankBranchInfo> temp = other.stream().filter(e -> root.getId().equals(e.getParentId().toString())).collect(Collectors.toList());
            childrenList.addAll(temp);
            if (!childrenList.isEmpty()) {
                setTree(childrenList, other);
            }
        });
    }
相关推荐
智恒百亿8 分钟前
RTX5090 八卡算力服务器:解析大模型私有化部署热门硬件的市场现状
运维·服务器·ai算力
user_admin_god13 分钟前
一体化数据归集接口详细设计说明
java·大数据·spring boot·后端·spring
LlmCraft|大模型工程实践33 分钟前
08. Docker Compose 一键编排:多容器应用的指挥家
java·spring cloud·eureka
珍珠先生40 分钟前
第14章 设计模式入门:单例、工厂、建造者与代理
java
吴声子夜歌1 小时前
Guava——基本工具(一)
windows·guava
坐吃山猪1 小时前
JDK 8 到 JDK 21 新特性知识要点
java·开发语言·windows
坐吃山猪1 小时前
【多线程】FutureTask多线程底层实现
java·开发语言·数据库
weixin199701080161 小时前
[特殊字符]《从0到1:闲鱼开放平台授权登录 + AccessToken 刷新 + 聚石塔部署完整链路》(附Python源码)
java·数据库·python
Freak嵌入式1 小时前
RP2040 PIO 编程模型与状态机原理:从硬件架构到工作逻辑全解析
java·大数据·开发语言·单片机·嵌入式硬件·硬件架构
kakakahahahaha1 小时前
重装系统后 D 盘没了怎么办?磁盘管理显示“存储空间保护分区”的恢复思路
windows·电脑·内容运营·软件需求