Java樹形結(jié)構(gòu)遞歸查詢方式
更新時間:2024年12月17日 10:32:23 作者:冷冷清清中的風風火火
文章介紹了Java中實現(xiàn)樹形結(jié)構(gòu)遞歸查詢的方法,首先找出所有的根節(jié)點,然后通過循環(huán)遍歷根節(jié)點,找到每個根節(jié)點的子節(jié)點,最終構(gòu)建完整的樹形結(jié)構(gòu),這是一種有效的遞歸查詢思路,適用于需要層次化展示數(shù)據(jù)的場景
Java樹形結(jié)構(gòu)遞歸查詢
思路
先找到所有的根節(jié)點,再通過循環(huán)遍歷所有的根節(jié)點,找到每個跟節(jié)點的子節(jié)點,最終形成一個樹形結(jié)構(gòu)
/** * 構(gòu)建樹形結(jié)構(gòu)數(shù)據(jù)new * @param org * @return */ public List<OrgEntity> builTree(OrgEntity org){ List<OrgEntity> treeMenus =new ArrayList<>(); // 查詢所有數(shù)據(jù) List<OrgEntity> reList = this.queryListByOrg(org); // 獲取根節(jié)點數(shù)據(jù) List<OrgEntity> rootList = this.getRootNode(reList); for(OrgEntity node : rootList){ // 為根節(jié)點數(shù)據(jù)遞歸添加字點數(shù)據(jù) node=buildChilTree(node,reList); treeMenus.add(node); } return treeMenus; }
/** * 獲取根節(jié)點new * @param list * @return */ public List<OrgEntity> getRootNode(List<OrgEntity> list){ List<OrgEntity> rootMenuLists =new ArrayList // 遍歷list,獲取根節(jié)點數(shù)據(jù) for(OrgEntity menuNode : list) { boolean isExit = false; for(OrgEntity node : list){ if(menuNode.getParentId() != null && menuNode.getParentId().equals(node.getId())){ isExit = true; break; } } // 如果遍歷該數(shù)據(jù)沒有上級節(jié)點,就放到根節(jié)點list中,否則就不放 if(!isExit){ rootMenuLists.add(menuNode); } } return rootMenuLists; }
//遞歸,建立子樹形結(jié)構(gòu)new public OrgEntity buildChilTree(OrgEntity pNode,List<OrgEntity> list){ List<OrgEntity> chilMenus =new ArrayList<>(); for(OrgEntity menuNode : list) { if(menuNode.getParentId().equals(pNode.getId())) { chilMenus.add(buildChilTree(menuNode,list)); } } pNode.setChildren(chilMenus); return pNode; }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解
下面小編就為大家?guī)硪黄獪\談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02Spring Boot整合mybatis并自動生成mapper和實體實例解析
本文是小編給大家總結(jié)的關(guān)于Spring Boot整合mybatis并自動生成mapper和實體的內(nèi)容,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05