递归快速获取机构树型图

server/2024/9/25 15:20:19/

        一般组织架构都会有层级关系,根部门的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);}});}


http://www.ppmy.cn/server/121874.html

相关文章

Mac 命令行常用操作笔记

1. 启用和禁用 Wi-Fi 打开 Wi-Fi&#xff1a; sudo networksetup -setairportpower "Wi-Fi" on 关闭 Wi-Fi&#xff1a; sudo networksetup -setairportpower "Wi-Fi" off 2. 搜索并连接 Wi-Fi 切换到 airport 工具目录&#xff1a; cd /System/Librar…

JavaScript动态数据可视化

一、引言 在前端开发中&#xff0c;JavaScript无疑是最核心的技术之一。它能够处理各种交互逻辑&#xff0c;实现复杂的功能。本文将通过一个动态数据可视化的案例&#xff0c;展示如何使用JavaScript实现复杂功能。动态数据可视化能够将大量数据以直观、生动的方式呈现&#…

AUTOSAR_EXP_ARAComAPI的5章笔记(9)

☞ 返回总目录 5.4 骨架类&#xff08;Skeleton Class&#xff09; 骨架类是由AUTOSAR 元模型的服务接口描述&#xff08;SI description&#xff09;生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台&#xff08;AP&#xff09;产品供应商的工具链将生成一个完…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

STM32基础学习笔记-NVIC中断面试基础题4

第四章、NVIC: 外部中断_串口中断 1、按键按下后&#xff0c;GPIO 会产生一个上升/下降沿&#xff0c;G030内部是如何触发外部中断的呢&#xff1f; 配置GPIO引脚&#xff1a; 首先&#xff0c;需要将特定的GPIO引脚配置为输入模式&#xff0c;并设置为外部中断源。这通常通过…

Discord:连接社区与协作的强大工具

目录 1. Discord 的安装与部署 2. 使用案例 3. Discord 的扩展功能 4. 与其他平台的对比 结语 引言 Discord 自2015年推出以来&#xff0c;迅速崛起为全球数百万用户的社交和协作平台。最初为游戏玩家设计的 Discord&#xff0c;现已发展成为各种社区、团队和兴趣小组的沟…

uniApp 解决uniapp三方地图获取位置接口的请求次数限制问题,分别提供 Android 和 iOS 的实现方法(原生插件获取)

以下是使用 UniApp 编写获取位置信息的原生插件步骤&#xff0c;这里分别提供 Android 和 iOS 的实现方法。 一、Android 端实现 创建原生插件模块 在 UniApp 项目目录下创建一个目录&#xff0c;比如 nativeplugins/android/locationPlugin。使用 Android Studio 创建一个 An…

Spring Boot 点餐系统:简化您的订餐流程

第五章 系统实现 5.1用户功能模块 用户点击进入到系统操作界面&#xff0c;可以对首页、个人中心、美食订单管理、美食评价管理、我的收藏管理等功能模块&#xff0c;个人信息&#xff1a;通过列表可以获取用户账号、用户姓名、性别、年龄、头像、用户手机、配送地址并进行修改…