java递归设置层级菜单的实现

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 方法
}

递归实现设置层级菜单

接下来就可以使用递归的方式来设置层级菜单了。具体实现步骤如下:

  1. 创建一个Map对象,用于存储菜单的id和对应的菜单对象。
Map<Integer, Menu> menuMap = new HashMap<>();
  1. 遍历菜单列表,将每个菜单对象存储到menuMap中。
for (Menu menu : menuList) {
    menuMap.put(menu.getId(), menu);
}
  1. 遍历菜单列表,为每个菜单对象设置子节点列表。
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);
        }
    }
}
  1. 返回顶级菜单列表。
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技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 使用hbuilder开发移动app

    以下是使用HBuilder开发移动App的完整攻略,包含两个示例说明: 步骤1:安装HBuilder 首先,您需要下载并安装HBuilder。您可以官方网站(https://www.dcloud.io/hbuilderx.html)下载HBuilder。 步骤2:创建新项目 在HBuilder中创建一个新项目您可以使用以下步骤创建新项目: 打开HBuilde…

    other 2023年5月6日
    00
  • 多线程CSerialPort类的多串口通信实现

    多线程CSerialPort类的多串口通信实现 介绍 本文将介绍如何使用CSerialPort类实现多串口通信,并使用多线程提高程序性能。 CSerialPort类 CSerialPort类是一个实现了Windows串口通信的类。它封装了Windows的一些API,使得串口通信变得更加容易。以下是CSerialPort类的一些方法和属性: Open: 打开串…

    其他 2023年3月28日
    00
  • iOS设备管理器激活步骤 一键激活苹果系统管理器

    为了帮助读者更好地理解iOS设备管理器激活步骤及一键激活苹果系统管理器的攻略,本文将采用Markdown格式,对该主题进行详细的讲解,在过程中包含两条示例说明。 什么是iOS设备管理器? iOS设备管理器是一种用于管理iOS设备的软件,可帮助管理员定位、锁定、重置和清除丢失的设备,同时使组织内所有设备保持最新状态。它还提供了一些必要的安全措施,如强制密码保护…

    other 2023年6月27日
    00
  • Unity3D之UGUI学习笔记(三):EventSystem

    Unity3D之UGUI学习笔记(三):EventSystem 什么是EventSystem 在Unity3D中,EventSystem是用于处理应用程序中事件的系统。它是Unity3D中UI的基础,用于处理用户输入和UI操作。EventSystem可以让你的UI元素识别用户的事件,如鼠标点击或手柄控制。通过使用EventSystem,你可以在GameObj…

    其他 2023年3月28日
    00
  • Springboot项目引入druid安装部署使用教程

    很抱歉,由于当前平台的限制,我无法以标准的markdown格式文本回答您的问题。但是,我可以为您提供详细的攻略,包含两个示例说明。以下是关于Spring Boot项目引入Druid的安装部署使用教程的完整攻略: 1. 引入Druid依赖 在项目的pom.xml文件中添加Druid的依赖: <dependency> <groupId>c…

    other 2023年10月19日
    00
  • Java中将File转化为MultipartFile的操作

    Java中将File转化为MultipartFile的操作通常用于上传文件,下面是对这个操作的完整讲解攻略: 1. 引入依赖 在pom.xml文件中引入相关依赖,一般需要引入spring-web,commons-fileupload等依赖。 <dependency> <groupId>org.springframework</g…

    other 2023年6月27日
    00
  • JVM学习笔记一:内存管理

    JVM学习笔记一:内存管理 Java虚拟机(JVM)是一种平台无关的虚拟机,它是Java程序运行的基础。JVM的内存管理是Java程序员需要掌握的重要的知识点之一。本篇文章主要介绍JVM的内存管理。 JVM的内存划分 JVM将内存划分为以下几个区域: 程序计数器:程序计数器是JVM中的一块较小的内存区域,它用于存储下一条指令的地址。如果当前线程执行的是Jav…

    其他 2023年3月28日
    00
  • 通过实例解析Java类初始化和实例初始化

    通过实例解析Java类初始化和实例初始化的攻略 在Java中,类初始化和实例初始化是非常重要的概念。本篇攻略将通过具体的示例来讲解它们的作用和区别。 什么是类初始化 类初始化是当一个类被加载到内存中时所进行的一系列操作,主要包括两个方面:类本身的初始化操作和对类中静态成员变量的初始化。 类本身的初始化操作通常指对类的静态成员变量的赋值操作,以及静态代码块的执…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部