【Java】使用递归的方法获取层级关系数据demo
使用递归来完善各种业务数据的层级关系的获取
引言:在Java开发中,我们通常会遇到层层递进的关系型数据的获取问题,有时是树状解构,或金字塔结构,怎么描述都行,错综复杂的关系在程序中还是可以理清的。
这里插一句题外话,和神经网络算法类似,简单的递进程序可以完成数据的拼接,例如:AI机器人根据问题进行的实时回答,浏览器搜索信息等等。引用量子矩阵算法,根据层层递进的关系数据将答案一层层的推导出来,然后得出最终的文本答案或者图片、视频等最终结果。
这里有个简单的示例,根据某个员工或员工的集合获取员工的上下级关系,丢代码先(亲测有效哦)
public class RecursionDemo {public static void main(String[] args) {List<String> employeeUniqueCode = Arrays.asList("1","2","3","4","5");String companyCode = "companyCode";Set<String> resultSet = new HashSet<>();for (String employeeCode : employeeUniqueCode) {findAllSubordinateEmployeeCodeByHisSuperiorLeaderCode(employeeCode, companyCode, resultSet);}resultSet.forEach(System.out::println);}public static void findAllSubordinateEmployeeCodeByHisSuperiorLeaderCode(String superiorLeadCode, String companyCode, Set<String> employeeCodeSet) {if (StringUtils.isEmpty(superiorLeadCode)) {return;}xxxxxDomain employeeByEmployeeCode = xxxMapper.getEmployeeByEmployeeCode(superiorLeadCode);if (ObjectUtils.isEmpty(employeeByEmployeeCode)) {return;}employeeCodeSet.add(superiorLeadCode);List<String> list = xxxMapper.findAllSubordinateChildEmployeeCodes(superiorLeadCode, companyCode);if (CollectionUtils.isNotEmpty(list)) {for (String code : list) {findAllSubordinateEmployeeCodeByHisSuperiorLeaderCode(code, companyCode, employeeCodeSet);}}}}
其实发现递归也仅仅是简单关系的查询而已,和每个神经元计算相同,满足特定的条件出现特定字符,然后根据组装算法拼接完整文本结果。继续递归,复杂关系的套路其实是一样的,简单关系的叠加态就成了复杂关系,复杂关系的查询递归的递归,就是在一个现有的条件中,获取条件参数嵌入另一个符合的递归条件中,环环相扣。
以下是一个简单的递归查询关系的工具,该程序满足小白的需求,有助于理解
/*** 递归找出改员工的所有下级员工编码* @param superiorLeadCode 员工编码* @param companyCode 企业编码* @param employeeCodeSet 空结果set集合*/public void findAllSubordinateEmployeeCodeByHisSuperiorLeaderCode(String superiorLeadCode, String companyCode, Set<String> employeeCodeSet) {//员工编码作为上级领导编码查询其子级,若子级不为空,则继续遍历子级查询下级,if (StringUtils.isEmpty(superiorLeadCode)) {return;}EmployeeInfo employeeByEmployeeCode = employeeInfoMapper.getEmployeeByEmployeeCode(superiorLeadCode);if (ObjectUtils.isEmpty(employeeByEmployeeCode)) {return;}employeeCodeSet.add(superiorLeadCode);List<String> list = employeeInfoMapper.findAllSubordinateChildEmployeeCodes(superiorLeadCode, companyCode);if (CollectionUtils.isNotEmpty(list)) {for (String code : list) {findAllSubordinateEmployeeCodeByHisSuperiorLeaderCode(code, companyCode, employeeCodeSet);}}}
根据员工来查找其下级,若下级还有下级,那么由该传入的员工数据,查完所有的下级。(这里并没有考虑性能,若有优化,不吝赐教哈)

相关文章:
【Java】使用递归的方法获取层级关系数据demo
使用递归来完善各种业务数据的层级关系的获取 引言:在Java开发中,我们通常会遇到层层递进的关系型数据的获取问题,有时是树状解构,或金字塔结构,怎么描述都行,错综复杂的关系在程序中还是可以理清的。 这…...
工业6轴机械臂运动学逆解(解析解)
工业6轴机械臂运动学逆解(解析解) 通常工业机械臂采用6旋转轴串连的形式,保证了灵活性,但为其运动学逆解(即已知机械臂末端的位姿 P P P,求机械臂各个旋转轴的旋转角)带来了较大的困难ÿ…...
管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B
老规矩,看目录,平均3-5题 文章目录 A/B2023真题(2023-19)-A-选项特点:两个等号;-判断需联立的难易:难,看着感觉需要联立,所以判断联立需要有理论支撑,不然还…...
为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?
1、什么是梯度消失(gradient vanishing)? 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。 2、什么是梯度爆炸(gradient exploding)? 参数更新过小大,破坏了…...
【力扣100】146.LRU缓存
添加链接描述 class DLinkedNode:def __init__(self, key0, value0):self.key keyself.value valueself.prev Noneself.next Noneclass LRUCache:def __init__(self, capacity: int):self.cache dict()# 使用伪头部和伪尾部节点 self.head DLinkedNode()self.tail D…...
【Vue中给输入框加入js验证_blur失去焦点进行校验】
【Vue中给输入框加入js验证_blur失去焦点进行校验】 通俗一点就是给输入框加个光标离开当前文本输入框时,然后对当前文本框内容进行校验判断 具体如下: 1.先给文本框加属性 blur“validatePhoneNumber” <el-input v-model“entity.telephone” blur…...
vue3项目引入电子签名(可横屏竖屏)
实现效果:(左边横屏,右边竖屏) 前言:【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 :GitHub - linjc/smooth-signature: H5带笔锋手写签名,支持PC端和移动端,任何前…...
mysql中count(*)、count(1)、count(主键)、count(字段)的区别
文章目录 count函数的语义count(主键)count(1)count(*)count(字段)替代方案explain或者show table status中间表或者其他数据库计数 以下分析都是基于 select count(?) from table 这个语句来分析,不带过滤条件。 count函数的语义 count() 是一个聚合函数&#x…...
Nginx生成自签名证书从而添加域名的HTTPS访问
数字证书 ## 原理参考 https://mysticaldream.github.io/2023/05/certificate/## https://blog.csdn.net/m0_52440465/article/details/130713591 简介 数字证书是由证书颁发机构(CA)签名并颁发的电子文件,用于建立网络连接的身份认证和加密通信。SSL 证书是数字证书的一种。…...
无框架Java转go语言写http与tcp请求
项目地址 https://github.com/cmdch2017/http_tcpServer 项目结构 如何快速上手 http篇 1、controller包就相当于RestController,这里返回了一个Person对象,当你需要新建一个接口时,再新写一个func仿照下面的方法就行了 package control…...
【Git】Git基本操作
文章目录 Git 是什么Git 的优点Git 安装Linux UbuntuLinux CentOsWindows Git 基本操作1. 创建 Git 本地仓库2. 配置 Git3. Git工作区、暂存区和版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退 Git 是什么 Git是一个免费的、开源的分布式版本控制系统,…...
JavaSE学习笔记 Day20
JavaSE学习笔记 Day20 个人整理非商业用途,欢迎探讨与指正!! 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…...
【蓝桥杯选拔赛真题52】python空调模式 第十四届青少年组蓝桥杯python 选拔赛比赛真题解析
目录 python空调模式 一、题目要求 1、编程实现 2、输入输出...
Android Studio: 解决Gradle sync failed 错误
文章目录 1. 前言2. 错误情况3. 解决办法3.1 获取gradle下载地址3.2 获取gradle存放目录3.3 替换并删除临时文件3.4 触发Try Again 4. 执行成功 1. 前言 今天调试项目,发现新装的AS,在下载gradle的过程中,一直显示连接失败,Gradl…...
【手写数据库】从零开始手写数据库内核,行列混合存储模型,学习大纲成型了
目录 专栏内容: 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以…...
机器学习中的一些经典理论定理
PAC学习理论 当使用机器学习方法来解决某个特定问题时,通常靠经验或者多次试验来选择合适的模型、训练样本数量以及学习算法收敛的速度等。但是经验判断或多次试验往往成本比较高,也不太可靠,因此希望有一套理论能够分析问题难度、计算模型能…...
c语言:成本100元,40%的利润怎么计算|练习题
一、利润的计算公式: 利润售价-成本 售价成本/(1-利润率) 二、用c语言代码表示为: 如图: 三、计算源代码【带注释】 #include <stdio.h> int main() { float cost;//成本变量 int prof_rate;//利润率变量 float price;//…...
【Python必做100题】之第二十二题(复制列表)
题目:将一个列表的数据复制到另一个列表中 重点:确保复制到位要导入copy方法进行深度复制 代码如下: #将一个列表的数据复制到另一个列表中 import copy list [1,2,3,4] print(list) list1 copy.copy(list) list[0] 30 print(list) pri…...
Java 数据结构篇-实现堆的核心方法与堆的应用(实现 TOP-K 问题:最小 k 个数)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 堆的说明 2.0 堆的成员变量及其构造方法 3.0 实现堆的核心方法 3.1 实现堆的核心方法 - 获取堆顶元素 peek() 3.2 实现堆的核心方法 - 下潜 down(int i) 3.3 实…...
startUML6.0.1破解方法
startUML6.0.1破解方法 文章目录 startUML6.0.1破解方法1.startUML6.0.1快速破解2.概述3.安装Nodejs4.安装asar5.修改app.asar中的源码6.将修改后的源码重新压缩7.覆盖官方的asar文件8.重启startUML9.参考文档 1.startUML6.0.1快速破解 后绪步骤可以不看,直接下载我…...
Unity性能优化实战:Mesh Baker 纹理合并与UV重映射详解
1. 为什么需要纹理合并与UV重映射 在开发开放世界游戏时,场景中往往会出现大量重复的建筑、植被等模型。每个模型通常都有自己的材质球和贴图,这会导致两个严重问题:首先是Draw Call数量激增,每个材质球都会产生一次Draw Call&…...
LLM长文本处理实战:模块化分割策略与向量化预处理指南
1. 项目概述:一个为LLM打造的文本处理中心如果你和我一样,经常和大型语言模型打交道,无论是用它来总结文档、分析代码,还是处理客服对话,那你肯定遇到过这个痛点:喂给模型的文本太长了怎么办?模…...
抖音无水印下载器:终极免费批量下载工具完全指南
抖音无水印下载器:终极免费批量下载工具完全指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...
终极指南:如何免费使用Umi-OCR实现高效离线文字识别
终极指南:如何免费使用Umi-OCR实现高效离线文字识别 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...
Vibe Annotations:AI编程时代的视觉反馈工具,精准沟通前端修改意图
1. 项目概述:一个为AI编程时代量身定制的视觉反馈工具如果你和我一样,每天都在和AI编程助手(比如Cursor、Claude Code)打交道,那你肯定遇到过这个痛点:想让它帮你改一个网页按钮的颜色,或者调整…...
工业电气安全:电弧闪爆防护与Rittal机柜解决方案
1. 电弧闪爆现象的本质解析电弧闪爆(Arc Flash)是工业电气系统中最具破坏性的安全隐患之一。作为一名在电力行业工作15年的安全工程师,我亲眼见证过多次由电弧闪爆引发的严重事故。最令人震惊的是2008年某化工厂的案例:一位电工在…...
【OpenCV实战】从相机标定到PnP测距:手把手实现单目视觉定位(C++代码详解)
1. 相机标定基础与实战准备 单目视觉定位就像给机器人装上了一只"智慧之眼",而相机标定就是教会这只眼睛如何正确理解世界。想象一下,如果你戴了一副度数不合适的眼镜,看到的物体位置和形状都会失真——相机标定要解决的就是类似的…...
3PEAK思瑞浦 TPA3532-VS1R MSOP8 运算放大器
特性 超低输入偏置电流: -在TA25C时最大士1pA(实验室测试限值) 安 -在-40C至125C(实验室测试限值)下,最大30皮 低输入失调电压:250V(最大值) 集成保护缓冲器,最大偏移电压为200V 低电压噪声密度:18nV/vHz(在1kHz时) 宽带宽:2.1MHz 供电电压:4.5V至16V(2.…...
冲突矿产法规合规:供应链尽责管理与ESG风险应对实战指南
1. 冲突矿产法规合规:一场被低估的供应链风暴如果你是一家电子、汽车或工业设备制造公司的供应链、法务或合规负责人,现在请立刻停下手中的工作,问自己一个问题:我们公司使用的锡、钽、钨、金(3TG)这四种金…...
淘金币自动化脚本:3分钟完成淘宝全任务,每天节省20分钟
淘金币自动化脚本:3分钟完成淘宝全任务,每天节省20分钟 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojin…...
