Java遞歸遍歷樹(shù)形結(jié)構(gòu)的實(shí)現(xiàn)代碼
廢話不多說(shuō)了,直接給大家貼代碼,具體代碼如下所示:
//菜單樹(shù)形結(jié)構(gòu) public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); int menuId = jsonMenu.getInt("id"); int pid = jsonMenu.getInt("parentId"); if (parentId == pid) { JSONArray c_node = treeMenuList(menuList, menuId); jsonMenu.put("childNode", c_node); childMenu.add(jsonMenu); } } return childMenu; } public static void main(String args[]) { MenuCacheService menuCacheService = new MenuCacheService(); JSONArray jsonArray = new JSONArray(); Menu menu1 = new Menu(); menu1.setId(1l); menu1.setParentId(0); menu1.setLevel(0); Menu menu2 = new Menu(); menu2.setId(2l); menu2.setParentId(0); menu2.setLevel(0); Menu menu3 = new Menu(); menu3.setId(3l); menu3.setParentId(2); menu3.setLevel(1); Menu menu4 = new Menu(); menu4.setId(4l); menu4.setParentId(2); menu4.setLevel(1); Menu menu5 = new Menu(); menu5.setId(5l); menu5.setParentId(4); menu5.setLevel(2); Menu menu6 = new Menu(); menu6.setId(6l); menu6.setParentId(1); menu6.setLevel(1); jsonArray.add(menu1); jsonArray.add(menu2); jsonArray.add(menu3); jsonArray.add(menu4); jsonArray.add(menu5); jsonArray.add(menu6); System.out.print(menuCacheService.treeMenuList(jsonArray,0)); }
ps:java實(shí)現(xiàn)樹(shù)的遞歸遍歷(用于實(shí)現(xiàn)折疊菜單)
1.核心算法
package com.zf.tag.dao; import java.util.ArrayList; import java.util.List; import com.zf.tag.entity.dept.Dept; public class DeptDao extends BaseDao{ public static List<Dept> searchAllDept() throws Exception{ List<Object[]> listAllObject=new ArrayList<Object[]>(); List<Object[]> tmp=new ArrayList<Object[]>(); List<Dept> listAllDept=new ArrayList<Dept>(); String sql="select id,dname,up_did from tbl_dept"; listAllObject=getResult(sql); for (Object[] row : listAllObject) { Object[] ro = new Object[3]; ro[0] = row[0]; ro[1] = row[1]; ro[2] = row[2]; tmp.add(row); } for (Object[] row : tmp) { if (null == row[2]) { Dept d = new Dept(); d.setId(Integer.parseInt(String.valueOf(row[0]))); d.setDname(String.valueOf(row[1])); listAllDept.add(d); fomateDept(tmp, d); } } return listAllDept; } private static void fomateDept(List<Object[]> tmp, Dept dept) { for (Object[] row : tmp) { if ((null != row[2]) && Integer.parseInt(String.valueOf(row[2])) == dept.getId()) { Dept d = new Dept(); d.setId(Integer.parseInt(String.valueOf(row[0]))); d.setDname(String.valueOf(row[1])); List<Dept> list = dept.getChildren(); if (list == null) { list = new ArrayList<Dept>(); } list.add(d); dept.setChildren(list); fomateDept(tmp, d); } } } }
2.實(shí)體類(部門)
package com.zf.tag.entity.dept; import java.util.List; public class Dept { private Integer id; private String dname; private List<Dept> children; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public List<Dept> getChildren() { return children; } public void setChildren(List<Dept> children) { this.children = children; } public String toString(){ return this.getDname(); } }
以上所述是小編給大家介紹的Java遞歸遍歷樹(shù)形結(jié)構(gòu)的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!
更多精彩內(nèi)容請(qǐng)關(guān)注公眾號(hào)【Java技術(shù)迷】,可以通過(guò)以下二維碼關(guān)注
相關(guān)文章
解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題
這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Java實(shí)現(xiàn)導(dǎo)出Word文檔的示例代碼
poi-tl是一個(gè)基于Apache POI的Word模板引擎,也是一個(gè)免費(fèi)開(kāi)源的Java類庫(kù),你可以非常方便的加入到你的項(xiàng)目中。本文就利用它實(shí)現(xiàn)導(dǎo)出Word文檔功能,需要的可以參考一下2023-02-02Activiti7通過(guò)代碼動(dòng)態(tài)生成工作流實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Activiti7通過(guò)代碼動(dòng)態(tài)生成工作流實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Spring?Boot多個(gè)定時(shí)任務(wù)阻塞問(wèn)題的解決方法
在日常的項(xiàng)目開(kāi)發(fā)中,往往會(huì)涉及到一些需要做到定時(shí)執(zhí)行的代碼,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot多個(gè)定時(shí)任務(wù)阻塞問(wèn)題的解決方法,需要的朋友可以參考下2022-01-01Java編譯時(shí)類型與運(yùn)行時(shí)類型
這篇文章主要介紹了Java編譯時(shí)類型與運(yùn)行時(shí)類型,文章以父類BaseClass和子類SubClass為例展開(kāi)對(duì)主題的探討,具有一的?參考價(jià)值,需要的小伙伴可以參考一下2022-03-03