使用遞歸來完善各種業(yè)務數(shù)據(jù)的層級關系的獲取
引言:在Java開發(fā)中,我們通常會遇到層層遞進的關系型數(shù)據(jù)的獲取問題,有時是樹狀解構,或金字塔結構,怎么描述都行,錯綜復雜的關系在程序中還是可以理清的。
這里插一句題外話,和神經(jīng)網(wǎng)絡算法類似,簡單的遞進程序可以完成數(shù)據(jù)的拼接,例如:AI機器人根據(jù)問題進行的實時回答,瀏覽器搜索信息等等。引用量子矩陣算法,根據(jù)層層遞進的關系數(shù)據(jù)將答案一層層的推導出來,然后得出最終的文本答案或者圖片、視頻等最終結果。
這里有個簡單的示例,根據(jù)某個員工或員工的集合獲取員工的上下級關系,丟代碼先(親測有效哦)
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);}}}}
其實發(fā)現(xiàn)遞歸也僅僅是簡單關系的查詢而已,和每個神經(jīng)元計算相同,滿足特定的條件出現(xiàn)特定字符,然后根據(jù)組裝算法拼接完整文本結果。繼續(xù)遞歸,復雜關系的套路其實是一樣的,簡單關系的疊加態(tài)就成了復雜關系,復雜關系的查詢遞歸的遞歸,就是在一個現(xiàn)有的條件中,獲取條件參數(shù)嵌入另一個符合的遞歸條件中,環(huán)環(huán)相扣。
以下是一個簡單的遞歸查詢關系的工具,該程序滿足小白的需求,有助于理解
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);}}}
根據(jù)員工來查找其下級,若下級還有下級,那么由該傳入的員工數(shù)據(jù),查完所有的下級。(這里并沒有考慮性能,若有優(yōu)化,不吝賜教哈)
