Java递归设置层级菜单的实现,可以通过以下几个步骤来完成:
设计数据模型
首先需要设计数据模型,以便存储菜单的信息。这里我们可以使用一个Menu类来表示菜单,它包含以下几个属性:
- id:菜单的唯一标识符。
- name:菜单名称。
- parentId:菜单的父节点标识符,如果为0表示该菜单是顶级菜单。
- children:菜单的子节点列表,如果没有子节点则为null。
下面是Menu类的代码实现:
public class Menu {
private Integer id;
private String name;
private Integer parentId;
private List<Menu> children;
// ... 省略 getter 和 setter 方法
}
递归实现设置层级菜单
接下来就可以使用递归的方式来设置层级菜单了。具体实现步骤如下:
- 创建一个Map对象,用于存储菜单的id和对应的菜单对象。
Map<Integer, Menu> menuMap = new HashMap<>();
- 遍历菜单列表,将每个菜单对象存储到menuMap中。
for (Menu menu : menuList) {
menuMap.put(menu.getId(), menu);
}
- 遍历菜单列表,为每个菜单对象设置子节点列表。
for (Menu menu : menuList) {
if (menu.getParentId() != null && menu.getParentId() > 0) {
Menu parentMenu = menuMap.get(menu.getParentId());
if (parentMenu != null) {
if (parentMenu.getChildren() == null) {
parentMenu.setChildren(new ArrayList<Menu>());
}
parentMenu.getChildren().add(menu);
}
}
}
- 返回顶级菜单列表。
List<Menu> topLevelMenus = new ArrayList<>();
for (Menu menu : menuList) {
if (menu.getParentId() == null || menu.getParentId() == 0) {
topLevelMenus.add(menu);
}
}
return topLevelMenus;
完整代码示例如下:
public class MenuUtil {
public static List<Menu> createMenuTree(List<Menu> menuList) {
Map<Integer, Menu> menuMap = new HashMap<>();
for (Menu menu : menuList) {
menuMap.put(menu.getId(), menu);
}
for (Menu menu : menuList) {
if (menu.getParentId() != null && menu.getParentId() > 0) {
Menu parentMenu = menuMap.get(menu.getParentId());
if (parentMenu != null) {
if (parentMenu.getChildren() == null) {
parentMenu.setChildren(new ArrayList<Menu>());
}
parentMenu.getChildren().add(menu);
}
}
}
List<Menu> topLevelMenus = new ArrayList<>();
for (Menu menu : menuList) {
if (menu.getParentId() == null || menu.getParentId() == 0) {
topLevelMenus.add(menu);
}
}
return topLevelMenus;
}
}
示例说明
示例1
假设有以下菜单列表:
id | name | parentId |
---|---|---|
1 | 首页 | 0 |
2 | 动态 | 0 |
3 | Java | 2 |
4 | Python | 2 |
5 | PHP | 2 |
6 | Spring | 3 |
7 | Hibernate | 3 |
8 | Flask | 4 |
9 | Django | 4 |
10 | CodeIgniter | 5 |
11 | Laravel | 5 |
如果要生成层级菜单,可以使用以下代码:
List<Menu> menuList = new ArrayList<>();
menuList.add(new Menu(1, "首页", 0, null));
menuList.add(new Menu(2, "动态", 0, null));
menuList.add(new Menu(3, "Java", 2, null));
menuList.add(new Menu(4, "Python", 2, null));
menuList.add(new Menu(5, "PHP", 2, null));
menuList.add(new Menu(6, "Spring", 3, null));
menuList.add(new Menu(7, "Hibernate", 3, null));
menuList.add(new Menu(8, "Flask", 4, null));
menuList.add(new Menu(9, "Django", 4, null));
menuList.add(new Menu(10, "CodeIgniter", 5, null));
menuList.add(new Menu(11, "Laravel", 5, null));
List<Menu> menuTree = MenuUtil.createMenuTree(menuList);
最终生成的层级菜单如图所示:
- 首页
- 动态
- Java
- Spring
- Hibernate
- Python
- Flask
- Django
- PHP
- CodeIgniter
- Laravel
示例2
假设有以下菜单列表:
id | name | parentId |
---|---|---|
1 | 菜单1 | 0 |
2 | 菜单2 | 0 |
3 | 菜单3 | 1 |
4 | 菜单4 | 1 |
5 | 菜单5 | 3 |
6 | 菜单6 | 4 |
7 | 菜单7 | 6 |
8 | 菜单8 | 5 |
9 | 菜单9 | 2 |
10 | 菜单10 | 0 |
如果要生成层级菜单,可以使用以下代码:
List<Menu> menuList = new ArrayList<>();
menuList.add(new Menu(1, "菜单1", 0, null));
menuList.add(new Menu(2, "菜单2", 0, null));
menuList.add(new Menu(3, "菜单3", 1, null));
menuList.add(new Menu(4, "菜单4", 1, null));
menuList.add(new Menu(5, "菜单5", 3, null));
menuList.add(new Menu(6, "菜单6", 4, null));
menuList.add(new Menu(7, "菜单7", 6, null));
menuList.add(new Menu(8, "菜单8", 5, null));
menuList.add(new Menu(9, "菜单9", 2, null));
menuList.add(new Menu(10, "菜单10", 0, null));
List<Menu> menuTree = MenuUtil.createMenuTree(menuList);
最终生成的层级菜单如图所示:
- 菜单1
- 菜单3
- 菜单5
- 菜单4
- 菜单6
- 菜单7
- 菜单2
- 菜单9
- 菜单10
以上是Java递归设置层级菜单的实现攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java递归设置层级菜单的实现 - Python技术站