欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java遞歸遍歷樹(shù)形結(jié)構(gòu)的實(shí)現(xiàn)代碼

 更新時(shí)間:2020年11月17日 14:47:29   作者:郝世海  
這篇文章主要介紹了Java遞歸遍歷樹(shù)形結(jié)構(gòu)的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

廢話不多說(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)文章

  • Java?精煉解讀類和對(duì)象原理

    Java?精煉解讀類和對(duì)象原理

    面向?qū)ο竽耸荍ava語(yǔ)言的核心,是程序設(shè)計(jì)的思想。Java語(yǔ)言的面向?qū)ο蠹夹g(shù)包括了面向?qū)ο蠛兔嫦蜻^(guò)程的基本概念,面向?qū)ο蟮奶卣?,Java語(yǔ)言的類,對(duì)象,修飾符,抽象類等一系列的知識(shí)點(diǎn)
    2022-03-03
  • java類加載機(jī)制、類加載器、自定義類加載器的案例

    java類加載機(jī)制、類加載器、自定義類加載器的案例

    這篇文章主要介紹了java類加載機(jī)制、類加載器、自定義類加載器的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題

    解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題

    這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java實(shí)現(xiàn)導(dǎo)出Word文檔的示例代碼

    Java實(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-02
  • java 如何判斷是否是26個(gè)英文字母

    java 如何判斷是否是26個(gè)英文字母

    這篇文章主要介紹了java 如何判斷是否是26個(gè)英文字母的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Activiti7通過(guò)代碼動(dòng)態(tài)生成工作流實(shí)現(xiàn)詳解

    Activiti7通過(guò)代碼動(dòng)態(tài)生成工作流實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Activiti7通過(guò)代碼動(dòng)態(tài)生成工作流實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java使用ffmpeg處理視頻的方法

    java使用ffmpeg處理視頻的方法

    這篇文章主要介紹了java使用ffmpeg處理視頻的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring?Boot多個(gè)定時(shí)任務(wù)阻塞問(wèn)題的解決方法

    Spring?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-01
  • SpringAOP中的通知Advice解析

    SpringAOP中的通知Advice解析

    這篇文章主要介紹了SpringAOP中的通知Advice解析,AOP 中的通知是基于連接點(diǎn)業(yè)務(wù)邏輯的一種增強(qiáng),Spring AOP 可以基于 XML 方式和基于注解方式定義,只是寫法不同,這里只使用注解的方式來(lái)講解通知的詳細(xì)用法,需要的朋友可以參考下
    2023-09-09
  • Java編譯時(shí)類型與運(yùn)行時(shí)類型

    Java編譯時(shí)類型與運(yùn)行時(shí)類型

    這篇文章主要介紹了Java編譯時(shí)類型與運(yùn)行時(shí)類型,文章以父類BaseClass和子類SubClass為例展開(kāi)對(duì)主題的探討,具有一的?參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論