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