Java實現樹形結構的示例代碼
前言
由於業務需要,後端需要返回一個樹型結構給前端,包含父子節點的數據已經在數據庫中存儲好,現在需要做的是如何以樹型結構的形式返給給前端。
數據庫表結構
實現思路
1、拿到有父子節點的集合數據
2、遍歷集合數據,拿到所有的根節點
3、遍歷根節點,拿到所有的子節點
4、遞歸子節點,將遞歸的子節點接上其父節點,直到子節點為空,遞歸完成
5、遞歸好後以集合形式返回,返回前端時以JSON格式轉換後返回
具體代碼
1、造數據,和數據庫表數據一致
package com.lyq.generateTree; import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; /** * @author : [LiuYanQiang] * @version : [v1.0] * @className : TreeMain * @description : [描述說明該類的功能] * @createTime : [2022/5/3 0:05] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/3 0:05] * @updateRemark : [描述說明本次修改內容] */ public class TreeMain { public static void main(String[] args) { List<Tree> list = new ArrayList<>(); //造數據 list.add(new Tree("22650", "0", "第一周")); list.add(new Tree("22651", "22650", "1.1 隨堂練習:《你認為以下屬於人工智能的是什麼呢?》,時間:0.5min")); list.add(new Tree("22652", "22650", "1.2 主題討論:《使用循環代碼塊繪制正五角星》,時間:5min")); list.add(new Tree("22653", "22650", "1.3 主題討論:《延時測試》,時間:0.5min")); list.add(new Tree("22654", "22650", "1.4 調查問卷:《測試延時時間》, 時間:0.5min")); list.add(new Tree("22655", "22650", "1.5 研究與挑戰:翟文彪老師開播啦,時間:1min,[N]")); list.add(new Tree("22656", "22650", "1.6 研究與挑戰:米新江教授開播啦,時間:1min,[N]")); list.add(new Tree("22657", "22656", "1.6.1 研究與挑戰:丁中文老師開播啦,時間:1min,[N]")); list.add(new Tree("22658", "22656", "1.6.2 研究與挑戰:郝曉軍老師開播啦,時間:1min,[N]")); list.add(new Tree("22659", "22656", "1.6.3 研究與挑戰:張娟老師開播啦,時間:1min,[N]")); list.add(new Tree("22660", "22656", "1.6.4 研究與挑戰:王懷軍老師開播啦,時間:1min,[N]")); list.add(new Tree("22661", "22656", "1.6.5 研究與挑戰:何操老師開播啦,時間:1min,[N]")); list.add(new Tree("22662", "22656", "1.6.6 研究與挑戰:武新麗老師開播啦,時間:1min,[N]")); list.add(new Tree("22663", "22656", "1.6.7 一鍵簽到:人臉識別,時間:2min")); list.add(new Tree("22664", "22656", "1.6.8 手勢簽到:人臉識別22,時間:2min")); list.add(new Tree("22665", "22656", "1.6.9 研究與挑戰:吳欣明老師開播啦,時間:1min,[N]")); list.add(new Tree("22666", "22656", "1.6.10 研究與挑戰:程艷艷老師開播啦,時間:1min,[N]")); list.add(new Tree("22667", "22656", "1.6.11 研究與挑戰:本學期課程內容,時間:0.5min")); list.add(new Tree("22668", "22656", "1.6.12 研究與挑戰:米老師的教學團隊介紹,時間:0.3min")); list.add(new Tree("22669", "22650", "1.7 研究與挑戰:米老師的教學團隊介紹,時間:0.3min")); list.add(new Tree("22670", "22650", "1.8 研究與挑戰:米老師的教學團隊介紹,時間:0.3min")); list.add(new Tree("22671", "22650", "1.9 研究與挑戰:助教機器人提醒您參與活動,時間:2min")); list.add(new Tree("22672", "22650", "1.10 研究與挑戰:AR系統使用教程-學生端,時間:5min")); list.add(new Tree("22673", "22672", "1.10.1 研究與挑戰:不一樣的課堂修改版,時間:0.5min")); list.add(new Tree("22674", "22673", "1.10.1.1 研究與挑戰:下載AR APP,時間:8min")); list.add(new Tree("22675", "22674", "1.10.1.1.1 研究與挑戰:修改版手機端AR助教機器人的登錄,時間:5min")); list.add(new Tree("22676", "22674", "1.10.1.1.2 研究與挑戰:app頁面展示,時間:2min")); list.add(new Tree("22677", "22674", "1.10.1.1.3 研究與挑戰:使用網頁版方式, 時間:3min")); list.add(new Tree("22678", "22674", "1.10.1.1.4 研究與挑戰:《使用學習通賬號密碼登錄AR網頁版》,時間:5min")); list.add(new Tree("22679", "22674", "1.10.1.1.5 主題討論:修改時間2022年4月4日《上傳:進入AR網頁版後的界面》,時間:3min")); list.add(new Tree("22680", "22673", "1.10.1.2 研究與挑戰:AR學生端教程視頻,時間:2min")); list.add(new Tree("22681", "22672", "1.10.2 研究與挑戰:修改時間2022年4月4日溫馨提示-釘釘,時間:0.3min")); list = new ReplacementTree().builTree(list); String jsonString = JSON.toJSONString(list); System.out.println(jsonString); } }
2、樹型結構實體類
package com.lyq.generateTree; import java.util.ArrayList; import java.util.List; /** * @author : [LiuYanQiang] * @version : [v1.0] * @className : ReplacementTree * @description : [樹型結構裝換] * @createTime : [2022/5/2 23:37] * @updateUser : [LiuYanQiang] * @updateTime : [2022/5/2 23:37] * @updateRemark : [描述說明本次修改內容] */ public class ReplacementTree { /* * @version V1.0 * Title: builTree * @author LiuYanQiang * @description 始樹形結構創建 * @createTime 2022/5/3 0:18 * @param [list] * @return java.util.List<com.lyq.generateTree.Tree>*/ public List<Tree> builTree(List<Tree> list) { List<Tree> treeList = new ArrayList<>(); for (Tree tree : this.getRootNode(list)) { //建立子樹節點 tree = this.buildChilTree(tree,list); //為根節點設置子樹節點 treeList.add(tree); } return treeList; } /* * @version V1.0 * Title: buildChilTree * @author LiuYanQiang * @description 通過遞歸來創建子樹形結構 * @createTime 2022/5/3 0:18 * @param [tree, list] * @return com.lyq.generateTree.Tree*/ private Tree buildChilTree(Tree tree,List<Tree> list) { List<Tree> treeList = new ArrayList<>(); for (Tree t : list) { //判斷當前父節點是否存在子節點 if (t.getP_id().equals(tree.getId())) { treeList.add(this.buildChilTree(t,list)); } } tree.setChildren(treeList); return tree; } /* * @version V1.0 * Title: getRootNode * @author LiuYanQiang * @description 獲取全部根節點 * @createTime 2022/5/3 0:18 * @param [list] * @return java.util.List<com.lyq.generateTree.Tree>*/ private List<Tree> getRootNode(List<Tree> list) { List<Tree> rootList = new ArrayList<>(); for (Tree tree : list) { if (tree.getP_id().equals("0")) { rootList.add(tree); } } return rootList; } }
最後返回情況如下
到此這篇關於Java實現樹形結構的示例代碼的文章就介紹到這瞭,更多相關Java樹形結構內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JavaScript前端面試扁平數據轉tree與tree數據扁平化
- JAVA List和Map切割工具詳解
- 正則表達式匹配${key}並在Java中使用的詳細方法
- Java利用遞歸實現樹形結構的工具類
- postman 如何實現傳遞 ArrayList 給後臺