使用递归来完善各种业务数据的层级关系的获取
引言:在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) { 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) ; } } } }
其实发现递归也仅仅是简单关系的查询而已,和每个神经元计算相同,满足特定的条件出现特定字符,然后根据组装算法拼接完整文本结果。继续递归,复杂关系的套路其实是一样的,简单关系的叠加态就成了复杂关系,复杂关系的查询递归的递归,就是在一个现有的条件中,获取条件参数嵌入另一个符合的递归条件中,环环相扣。
以下是一个简单的递归查询关系的工具,该程序满足小白的需求,有助于理解
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) ; } } }
根据员工来查找其下级,若下级还有下级,那么由该传入的员工数据,查完所有的下级。(这里并没有考虑性能,若有优化,不吝赐教哈)