递归list显示菜单
利用递归使从数据库取出的菜单表数据转换成菜单树的结构
生成方法是给list每个元素添加一个children对象,这个对象可以存放此菜单的子菜单项
list原数据
{
"code": 200,
"msg": "处理成功",
"data": [
{
"id": 11,
"name": "删除角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 7,
"name": "删除用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 1,
"name": "用户管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 4,
"name": "查看用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 5,
"name": "修改用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 6,
"name": "添加用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 2,
"name": "角色管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 8,
"name": "查看角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 9,
"name": "修改角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 10,
"name": "添加角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 3,
"name": "系统管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 12,
"name": "查看菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 13,
"name": "修改菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 14,
"name": "添加菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 15,
"name": "删除菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 16,
"name": "修改用户密码",
"pid": 5,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 17,
"name": "修改用户密码密码密码",
"pid": 16,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
}
]
}
Java实现方法代码
List<Menu> Pmenu = new ArrayList<Menu>();
//循环找所有一级菜单(pid=0)
for (int i = 0; i < menuList.size(); i++) {
if (menuList.get(i).getPid() == 0) {
Pmenu.add(menuList.get(i));
}
}
//遍历所有菜单项,将二级菜单添加进相应的一级菜单内
for (Menu menu : Pmenu) {
menu.setChildren(getChild(menu.getId(), menuList));
}
//返回所有菜单项
return Result.success(Pmenu);
}
public List<Menu> getChild(Integer pid, List<Menu> menulist) {
List<Menu> result = new ArrayList();
//遍历,将子菜单添加进父菜单项内
for (Menu menu : menulist) {
if (menu.getPid().equals(pid)) {
result.add(menu);
}
}
//继续遍历二级菜单是否有子菜单(递归)
for (Menu menu : result) {
menu.setChildren(getChild(menu.getId(), menulist));
}
//递归终止条件
if (result.size() == 0) {
return null;
}
return result; //返回结果集
}
list结果
{
"code": 200,
"msg": "处理成功",
"data": [
{
"id": 1,
"name": "用户管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": [
{
"id": 7,
"name": "删除用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 4,
"name": "查看用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 5,
"name": "修改用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": [
{
"id": 16,
"name": "修改用户密码",
"pid": 5,
"status": true,
"createDate": null,
"updateDate": null,
"children": [
{
"id": 17,
"name": "修改用户密码密码密码",
"pid": 16,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
}
]
}
]
},
{
"id": 6,
"name": "添加用户",
"pid": 1,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
}
]
},
{
"id": 2,
"name": "角色管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": [
{
"id": 11,
"name": "删除角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 8,
"name": "查看角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 9,
"name": "修改角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 10,
"name": "添加角色",
"pid": 2,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
}
]
},
{
"id": 3,
"name": "系统管理",
"pid": 0,
"status": true,
"createDate": null,
"updateDate": null,
"children": [
{
"id": 12,
"name": "查看菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 13,
"name": "修改菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 14,
"name": "添加菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
},
{
"id": 15,
"name": "删除菜单",
"pid": 3,
"status": true,
"createDate": null,
"updateDate": null,
"children": []
}
]
}
]
}