Java如何處理數(shù)據(jù)成為樹狀結(jié)構
更新時間:2024年07月25日 16:57:13 作者:騎豬撞地球QAQ
這篇文章主要介紹了Java如何處理數(shù)據(jù)成為樹狀結(jié)構問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
Java處理數(shù)據(jù)成為樹狀結(jié)構
如題所示,項目中需要將部分數(shù)據(jù)處理成為樹狀結(jié)構
實現(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é)構
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ù)拼樹
遞歸方法構建樹
/**
* 使用遞歸方法建樹
* @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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
springboot啟動feign項目報錯:Service id not legal hostnam的解決
這篇文章主要介紹了springboot啟動feign項目報錯:Service id not legal hostnam的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java IO三大模型(BIO/NIO/AIO)的使用總結(jié)
相信很多Java開發(fā)剛接觸IO模型時,都會被「BIO、NIO、AIO」「同步、異步、阻塞、非阻塞」這些概念繞暈,下面就來詳細的介紹一下 IO三大模型的使用,感興趣的可以了解一下2026-02-02
Java創(chuàng)建對象(顯式創(chuàng)建和隱含創(chuàng)建)
本文詳細介紹對象的創(chuàng)建,在 Java 語言中創(chuàng)建對象分顯式創(chuàng)建與隱含創(chuàng)建兩種情況,顯式創(chuàng)建和隱含創(chuàng)建,,需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09

