Java实现递归菜单树
在项目开发中,经常需要使用树形结构展示菜单、权限等。本文将详细讲解如何使用Java实现递归菜单树。
步骤
-
设计菜单数据模型。
java
public class Menu {
private Integer id;
private String name;
private Integer parentId;
// getter和setter方法省略
} -
获取所有菜单数据。
java
List<Menu> allMenus = menuDao.selectAllMenus(); -
构建根节点和子节点列表。
java
List<Menu> rootMenus = new ArrayList<>(); // 存储根节点列表
Map<Integer, List<Menu>> childMap = new HashMap<>(); // 存储子节点列表
for (Menu menu : allMenus) {
if (menu.getParentId() == 0) { // 如果是根节点
rootMenus.add(menu); // 放到根节点列表中
} else { // 如果是子节点
if (childMap.containsKey(menu.getParentId())) {
childMap.get(menu.getParentId()).add(menu); // 放到对应父节点的子节点列表中
} else {
List<Menu> childList = new ArrayList<>();
childList.add(menu);
childMap.put(menu.getParentId(), childList);
}
}
}
- 递归根节点,构建整个菜单树。
java
public void buildMenuTree(Menu rootMenu) {
List<Menu> childList = childMap.get(rootMenu.getId());
if (childList != null) {
rootMenu.setChildList(childList);
for (Menu childMenu : childList) {
buildMenuTree(childMenu);
}
}
}
for (Menu rootMenu : rootMenus) {
buildMenuTree(rootMenu);
}
至此,递归菜单树已经构建完成。
示例
假设有以下菜单数据:
id | name | parentId
1 | System | 0
2 | User | 1
3 | Role | 1
4 | Permission | 3
5 | Log | 1
执行代码后得到的结果为:
[
{
"id": 1,
"name": "System",
"parentId": 0,
"childList": [
{
"id": 2,
"name": "User",
"parentId": 1,
"childList": null
},
{
"id": 3,
"name": "Role",
"parentId": 1,
"childList": [
{
"id": 4,
"name": "Permission",
"parentId": 3,
"childList": null
}
]
},
{
"id": 5,
"name": "Log",
"parentId": 1,
"childList": null
}
]
}
]
小结
本文详细介绍了Java实现递归菜单树的步骤,并给出了示例代码。递归菜单树在项目开发中非常常见,熟练掌握递归算法是每个Java开发者必备的技能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现递归菜单树 - Python技术站