Java如何處理數(shù)據(jù)成為樹狀結(jié)構(gòu)
Java處理數(shù)據(jù)成為樹狀結(jié)構(gòu)
如題所示,項目中需要將部分數(shù)據(jù)處理成為樹狀結(jié)構(gòu)
實現(xiàn)過程
注:也可以使用sql達到該目的,但此處數(shù)據(jù)不多,故在代碼中處理,主要是sql處理不是很會
// 獲取需要封裝的數(shù)據(jù)
List<Data> dataAll = service.findAll();
if (CollUtil.isEmpty(dataAll)) {
return new ArrayList<>();
}
// 獲取頂層目錄 項目中上級編碼為空則為一級目錄
List<Data> parentList = dataAll.stream()
.filter(item -> ObjectUtil.isEmpty(item.getParentNumber())).collect(Collectors.toList());
// 獲取下級目錄,上級編碼不為空則非一級目錄
List<Data> childList = dataAll.stream()
.filter(item -> ObjectUtil.isNotEmpty(item.getParentNumber())).collect(Collectors.toList());
// 封裝樹狀結(jié)構(gòu)
return parentList.stream().map(item1 -> {
Data chapterVo = new Data();
BeanUtils.copyProperties(item1, chapterVo);
List<Data> videoVoList = childList.stream()
.filter(item2 -> item1.getBackgroundManagementCategoryNumber().equals(item2.getParentNumber()))
.map(item3 -> {
Data videoVo = new Data();
BeanUtils.copyProperties(item3, videoVo);
return videoVo;
})
.collect(Collectors.toList());
chapterVo.setChildren(videoVoList);
return chapterVo;
}).collect(Collectors.toList());
Java將查出來的數(shù)據(jù)拼樹
遞歸方法構(gòu)建樹
/**
* 使用遞歸方法建樹
* @param menuTrees 子節(jié)點集合 / 返回的數(shù)據(jù)
* @return List
*/
public static List<Dept> buildByRecursive(List<Dept> menuTrees) {
List<Dept> trees = new ArrayList<>();
for (Dept menuTree : menuTrees) {
//查找根節(jié)點
if (menuTree.getPcode() == null) {
trees.add(findChildren(menuTree,menuTrees));
}
}
return trees;
}/**
* 遞歸查找子節(jié)點
* @param menuTree 菜單數(shù)對象
* @param menuTrees 子節(jié)點
* @return MenuTree
*/
private static Dept findChildren(Dept menuTree,List<Dept> menuTrees){
for (Dept it : menuTrees) {
if(menuTree.getCode().equals(it.getPcode())) {
if (menuTree.getChildren() == null) {
menuTree.setChildren(new ArrayList<>());
}
menuTree.getChildren().add(findChildren(it,menuTrees));
}
}
return menuTree;
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringValidation自定義注解及分組校驗功能詳解
這篇文章主要介紹了SpringValidation自定義注解及分組校驗功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
SpringBoot中實現(xiàn)訂單30分鐘自動取消的三種方案分享
在電商和其他涉及到在線支付的應(yīng)用中,通常需要實現(xiàn)一個功能:如果用戶在生成訂單后的一定時間內(nèi)未完成支付,系統(tǒng)將自動取消該訂單,本文將詳細介紹基于Spring Boot框架實現(xiàn)訂單30分鐘內(nèi)未支付自動取消的幾種方案,并提供實例代碼,需要的朋友可以參考下2023-10-10
Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例
這篇文章主要介紹了Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
SpringBoot切面實現(xiàn)token權(quán)限校驗詳解
這篇文章主要介紹了SpringBoot切面實現(xiàn)token權(quán)限校驗詳解,要實現(xiàn)權(quán)限校驗,首先數(shù)據(jù)表和實體類上需要有權(quán)限字段,我的表中permission和gender是通過外鍵約束permission表和gender表實現(xiàn)枚舉的,因為可拓展性更好,需要的朋友可以參考下2024-01-01
Java AQS(AbstractQueuedSynchronizer)源碼解析
AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下2023-02-02
Springboot+Vue+axios實現(xiàn)文章收藏功能
這篇文章主要為大家詳細介紹了Springboot+Vue+axios實現(xiàn)文章收藏功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
java 實現(xiàn)取int型的第二個字節(jié)的數(shù)
這篇文章主要介紹了java 實現(xiàn)取int型的第二個字節(jié)的數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
淺談java+內(nèi)存分配及變量存儲位置的區(qū)別
下面小編就為大家?guī)硪黄獪\談java+內(nèi)存分配及變量存儲位置的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08

