Java樹形結(jié)構(gòu)遞歸查詢方式
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)文章
SpringCloud Zuul服務(wù)功能與使用方法解析
這篇文章主要介紹了SpringCloud Zuul服務(wù)功能與使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Springboot項(xiàng)目Mybatis升級(jí)為Mybatis-Plus的詳細(xì)步驟
在許多 Java 項(xiàng)目中,MyBatis 是一個(gè)廣泛使用的 ORM 框架,然而,隨著 MyBatis-Plus 的出現(xiàn),許多開發(fā)者開始遷移到這個(gè)更加簡(jiǎn)潔、高效的工具,它在 MyBatis 的基礎(chǔ)上提供了更多的功能,所以本文將介紹Springboot項(xiàng)目Mybatis升級(jí)為Mybatis-Plus的詳細(xì)步驟2025-03-03
springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼
Easy-Es是一款基于ElasticSearch官方提供的RestHighLevelClient打造的低碼開發(fā)框架,本文主要介紹了springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法
今天小編就為大家分享一篇關(guān)于Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Spring?boot?security權(quán)限管理集成cas單點(diǎn)登錄功能的實(shí)現(xiàn)
這篇文章主要介紹了Spring?boot?security權(quán)限管理集成cas單點(diǎn)登錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
詳談jpa中表的@OneToMany等關(guān)聯(lián)關(guān)系
這篇文章主要介紹了詳談jpa中表的@OneToMany等關(guān)聯(lián)關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

