當前位置:
首頁 >
树状结构数据查询方法
發布時間:2023/12/29
33
豆豆
生活随笔
收集整理的這篇文章主要介紹了
树状结构数据查询方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求
需要查詢組織架構下所有部門數據,這里層級有多深我們并不知道,所以不能通過for循環指定次數來遍歷,看這個圖
解決方案
參考了一些文檔大概意思就是--使用遞歸(名詞解釋:程序調用自身的編程技巧稱為遞歸)?
以下是我實現代碼:
/*** @Description: 獲取所有的部門信息** @Author: chengang* @Date: 2021/11/2 16:12* @param: parentId 父部門ID,首次進來傳root ID* @param: depts 最終需要返回的數據,首次進來是空的* @return:**/@Overridepublic void queryAllDeptInfos(Long parentId, List<DeptEntity> depts){// 根據部門ID獲取 ,子部門信息,List<DeptEntity> queryDepts = this.getDeptInfos(parentId);// 沒有子部門信息就返回if (CollectionUtils.isEmpty(queryDepts)) {return Collections.emptyList();}// 遍歷下一層級部門數據,加入到最終的listfor (int i = 0; i < queryDepts.size(); i++) {DeptEntity entity = queryDepts.get(i);// 當前部門,子部門加到返回的listdepts.add(entity);// 遞歸查詢子層級的數據List<DeptEntity> deptEntities = this.queryAllDeptInfos(entity.getDeptId(), depts);}return queryDepts;}下面是調用的地方,depts對象 最終獲取的就是root節點下整個樹狀結構的數據,當然可以傳其他非root根節點,最終會返回整個節點下樹狀信息
// 所有部門信息list List<DeptEntity> depts = new ArrayList<>(); // 調用獲取所有部門信息 dingTalkService.queryAllDeptInfos(1L, depts);這個比較費腦子,畫畫圖方便理解
1、我們先查出傳入的節點下,所有的子節點
2、如果沒有就返回
3、遍歷整個子級數據,一一加入到最終LIST,
4、繼續調用當前方法查詢出當前子級的子級,會通過參數傳遞,加入到最終結果LIST
其實就是在方法里,繼續調用當前的方法,這里注意一定要有結束條件。比如:查不到就結束。
總結
以上是生活随笔為你收集整理的树状结构数据查询方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis消息队列 | 黑马点评
- 下一篇: 数控机床G-Code在线仿真器