Java如何處理數(shù)據(jù)成為樹狀結(jié)構(gòu)
Java處理數(shù)據(jù)成為樹狀結(jié)構(gòu)
如題所示,項目中需要將部分?jǐn)?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-01SpringBoot中實現(xiàn)訂單30分鐘自動取消的三種方案分享
在電商和其他涉及到在線支付的應(yīng)用中,通常需要實現(xiàn)一個功能:如果用戶在生成訂單后的一定時間內(nèi)未完成支付,系統(tǒng)將自動取消該訂單,本文將詳細介紹基于Spring Boot框架實現(xiàn)訂單30分鐘內(nèi)未支付自動取消的幾種方案,并提供實例代碼,需要的朋友可以參考下2023-10-10Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例
這篇文章主要介紹了Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SpringBoot切面實現(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-01Java AQS(AbstractQueuedSynchronizer)源碼解析
AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下2023-02-02Springboot+Vue+axios實現(xiàn)文章收藏功能
這篇文章主要為大家詳細介紹了Springboot+Vue+axios實現(xiàn)文章收藏功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08java 實現(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