废话不多说了,直接给大家贴代码,具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
//菜单树形结构
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实现树的递归遍历(用于实现折叠菜单)
1.核心算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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.实体类(部门)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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递归遍历树形结构的相关内容,希望对大家有所帮助!