java递归把列表转为菜单树
菜单实体类
package com.utils.menu;
import java.util.List;
public class Menu {
private String name;
private String icon;
private String id;
private String isLeaf;
private String parentId;
private List<Menu> children;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIsLeaf() {
return isLeaf;
}
public void setIsLeaf(String isLeaf) {
this.isLeaf = isLeaf;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public List<Menu> getChildren() {
return children;
}
public void setChildren(List<Menu> children) {
this.children = children;
}
@Override
public String toString() {
return "Menu [name=" + name + ", icon=" + icon + ", id=" + id + ", isLeaf=" + isLeaf + ", parentId=" + parentId
+ ", children=" + children + "]";
}
}
菜单树工具类
package com.utils.menu;
import java.util.ArrayList;
import java.util.List;
public class MenuTreeUtil {
public List<Menu> findChildren(List<Menu> list,String root){
List<Menu> children = new ArrayList<Menu>();
for(Menu menu : list) {
if(root.equals(menu.getParentId())) {
children.add(menu);
}
}
for(Menu menu : children) {
if("1".equals(menu.getIsLeaf())) {
menu.setChildren(findChildren(list,menu.getId()));
}
}
return children;
}
}
调用
package com.utils.menu;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
public class MenuTreeTest {
public static void main(String[] args) {
String menuListStr = "[{\"id\":1,\"name\":\"一级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":2,\"name\":\"二级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":3,\"name\":\"三级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":4,\"name\":\"四级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":5,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"0\"},{\"id\":6,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"1\"},{\"id\":7,\"name\":\"二级子菜单\",\"icon\":\"icon1\",\"parentId\":\"2\",\"isLeaf\":\"0\"},{\"id\":8,\"name\":\"三级子菜单\",\"icon\":\"icon1\",\"parentId\":\"3\",\"isLeaf\":\"0\"},{\"id\":9,\"name\":\"一级孙子菜单\",\"icon\":\"icon1\",\"parentId\":\"6\",\"isLeaf\":\"0\"}]";
System.out.println(menuListStr.replace("\\", ""));
List<Menu> list = JSONArray.parseArray(menuListStr, Menu.class);
MenuTreeUtil menuTeeeUtil = new MenuTreeUtil();
List<Menu> result = menuTeeeUtil.findChildren(list,"0");
System.out.println(result);
String resultStr = JSON.toJSONString(result);
System.out.println(resultStr);
}
}
待转的list集合 json格式
[
{
"id": 1,
"name": "一级菜单",
"icon": "icon1",
"parentId": "0",
"isLeaf": "1"
},
{
"id": 2,
"name": "二级菜单",
"icon": "icon1",
"parentId": "0",
"isLeaf": "1"
},
{
"id": 3,
"name": "三级菜单",
"icon": "icon1",
"parentId": "0",
"isLeaf": "1"
},
{
"id": 4,
"name": "四级菜单",
"icon": "icon1",
"parentId": "0",
"isLeaf": "1"
},
{
"id": 5,
"name": "一级子菜单",
"icon": "icon1",
"parentId": "1",
"isLeaf": "0"
},
{
"id": 6,
"name": "一级子菜单",
"icon": "icon1",
"parentId": "1",
"isLeaf": "1"
},
{
"id": 7,
"name": "二级子菜单",
"icon": "icon1",
"parentId": "2",
"isLeaf": "0"
},
{
"id": 8,
"name": "三级子菜单",
"icon": "icon1",
"parentId": "3",
"isLeaf": "0"
},
{
"id": 9,
"name": "一级孙子菜单",
"icon": "icon1",
"parentId": "6",
"isLeaf": "0"
}
]
转化过的树形list json格式
[
{
"children": [
{
"icon": "icon1",
"id": "5",
"isLeaf": "0",
"name": "一级子菜单",
"parentId": "1"
},
{
"children": [
{
"icon": "icon1",
"id": "9",
"isLeaf": "0",
"name": "一级孙子菜单",
"parentId": "6"
}
],
"icon": "icon1",
"id": "6",
"isLeaf": "1",
"name": "一级子菜单",
"parentId": "1"
}
],
"icon": "icon1",
"id": "1",
"isLeaf": "1",
"name": "一级菜单",
"parentId": "0"
},
{
"children": [
{
"icon": "icon1",
"id": "7",
"isLeaf": "0",
"name": "二级子菜单",
"parentId": "2"
}
],
"icon": "icon1",
"id": "2",
"isLeaf": "1",
"name": "二级菜单",
"parentId": "0"
},
{
"children": [
{
"icon": "icon1",
"id": "8",
"isLeaf": "0",
"name": "三级子菜单",
"parentId": "3"
}
],
"icon": "icon1",
"id": "3",
"isLeaf": "1",
"name": "三级菜单",
"parentId": "0"
},
{
"children": [],
"icon": "icon1",
"id": "4",
"isLeaf": "1",
"name": "四级菜单",
"parentId": "0"
}
]