【Java】使用递归的方法获取层级关系数据demo

使用递归来完善各种业务数据的层级关系的获取

引言:在Java开发中,我们通常会遇到层层递进的关系型数据的获取问题,有时是树状解构,或金字塔结构,怎么描述都行,错综复杂的关系在程序中还是可以理清的。

这里插一句题外话,和神经网络算法类似,简单的递进程序可以完成数据的拼接,例如:AI机器人根据问题进行的实时回答,浏览器搜索信息等等。引用量子矩阵算法,根据层层递进的关系数据将答案一层层的推导出来,然后得出最终的文本答案或者图片、视频等最终结果。

这里有个简单的示例,根据某个员工或员工的集合获取员工的上下级关系,丢代码先(亲测有效哦)

java 复制代码
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) {
            xxxxxxServiceImpl.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);
            }
        }
    }

}

其实发现递归也仅仅是简单关系的查询而已,和每个神经元计算相同,满足特定的条件出现特定字符,然后根据组装算法拼接完整文本结果。继续递归,复杂关系的套路其实是一样的,简单关系的叠加态就成了复杂关系,复杂关系的查询递归的递归,就是在一个现有的条件中,获取条件参数嵌入另一个符合的递归条件中,环环相扣。

以下是一个简单的递归查询关系的工具,该程序满足小白的需求,有助于理解

java 复制代码
   /**
     * 递归找出改员工的所有下级员工编码
     * @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);
            }
        }
    }

根据员工来查找其下级,若下级还有下级,那么由该传入的员工数据,查完所有的下级。(这里并没有考虑性能,若有优化,不吝赐教哈)

相关推荐
郑州光合科技余经理11 分钟前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin199701080161 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
YangYang9YangYan1 小时前
2026 校招审计风控岗位 JD 拆解,工具、专业能力与面试考点
java·大数据·人工智能·数据分析
传奇开心果编程3 小时前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
wuminyu6 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
考虑考虑8 小时前
Java实现hmacsha256加密算法
java·后端·java ee
captain3768 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
MetaLite8 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Co_Hui8 小时前
Java 线程状态
java
土司大王8 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode