当前位置: 首页 > news >正文

递归快速获取机构树型图

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

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

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

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

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

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

        

        

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.lryc.cn/news/442713.html

相关文章:

  • [Web安全 网络安全]-XSS跨站脚本攻击
  • 数据库数据恢复—SQL Server附加数据库出现“错误823”怎么恢复数据?
  • Vscode 中新手小白使用 Open With Live Server 的坑
  • 【深度学习 transformer】Transformer与ResNet50在自定义数据集图像分类中的效果比较
  • 【系统架构设计师】专业英语90题(附答案详解)
  • ItemXItemEffect | ItemEffect
  • web 动画库
  • 我的AI工具箱Tauri版-MicrosoftTTS文本转语音
  • 【Webpack--013】SourceMap源码映射设置
  • 创新驱动,技术引领:2025年广州见证汽车电子技术新高度
  • Spring Boot框架在心理教育辅导系统中的应用案例
  • Shiro-550—漏洞分析(CVE-2016-4437)
  • 【例题】lanqiao4425 咖啡馆订单系统
  • 从小白到大神:C语言预处理与编译环境的完美指南(下)
  • 3657A/B/AM/BM矢量网络分析仪
  • 卸载完mathtype后,删除word加载项中的mathtype
  • vue 实现tab菜单切换
  • 大数据Flink(一百二十):Flink SQL自定义函数(UDF)
  • 【图像检索】基于灰度共生矩的纹理图像检索,matlab实现
  • 【操作系统】02.深入理解操作系统
  • 【Python】探索 Errbot:多功能聊天机器人框架
  • Linux 调试器 GDB 使用指南
  • MiniCPM3-4B | 笔记本电脑运行端侧大模型OpenBMB/MiniCPM3-4B-GPTQ-Int4量化版 | PyCharm环境
  • 【chromedriver编译-绕过selenium机器人检测】
  • 【JavaEE精炼宝库】HTTP | HTTPS 协议详解
  • Go语言基础学习01
  • 基于SSM+Vue+MySQL的酒店管理系统
  • 在WPF中保存控件内容为图片
  • C#用SDK打开海康工业相机,callback取图Bitmap格式,并保存
  • C语言字符学习初级优先看这个就够了