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