java TreeUtil菜单递归工具类

TreeUtil是一个Java工具类,它提供了一些递归函数,用于将列表数据构建成树形结构。这个工具类的使用非常方便,特别是在前后端分离的Web应用程序中,前端通常需要树形结构的JSON数据表示,而该工具类正是为此而设计。

TreeUtil菜单递归工具类的主要功能是将一组菜单数据转换为树结构,并使用json返回给前端页面。

标题

引入

在使用该工具类之前,需要先引入以下依赖:

<!-- Lombok,可以省去get/set方法的编写 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- JSON序列化工具 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.60</version>
</dependency>

核心代码

具体的核心代码如下:

public class TreeUtil {

    /**
     * 把列表转换成树形结构
     * @param list
     * @param parentId
     * @param <T>
     * @return
     */
    public static <T extends TreeNode> List<T> build(List<T> list, Long parentId) {
        List<T> result = new ArrayList<T>();
        //遍历所有节点
        for (T node : list) {
            //找到父节点为parentId的节点
            if (node.getParentId().equals(parentId)) {
                result.add(node);
                // 递归遍历子节点
                node.setChildren(build(list, node.getId()));
            }
        }
        return result;
    }

    /**
     * 构建树形结构,并转成JSON字符串
     * @param list      待转换的列表数据
     * @param rootId    根节点ID
     * @return
     */
    public static String buildJson(List<? extends TreeNode> list, Long rootId) {
        // 构建树形结构
        List<? extends TreeNode> treeList = build(list, rootId);
        // 将树形结构转成JSON字符串
        return JSON.toJSONString(treeList);
    }
}

示例说明

假设现在有一个菜单数据列表,我们想要将它转换为树形结构,并使用json返回给前端。具体的数据如下:

@Data
public class Menu implements TreeNode {
    private Long id;
    private Long parentId;
    private String name;
    private String url;

    private List<TreeNode> children;
}

我们需要先将菜单数据列表转换为树形结构,然后将结果转成json格式,给前端页面渲染。

public class MenuController {

    @RequestMapping("/menu")
    public String menu(Model model) {
        //构建模拟数据
        List<Menu> menus = new ArrayList<>();
        menus.add(new Menu(1L, 0L, "系统管理", ""));
        menus.add(new Menu(2L, 1L, "用户管理", "/user/list"));
        menus.add(new Menu(3L, 1L, "角色管理", "/role/list"));
        menus.add(new Menu(4L, 1L, "菜单管理", "/menu/list"));
        menus.add(new Menu(5L, 0L, "用户日志", ""));

        // 构建树形结构
        List<? extends TreeNode> treeList = TreeUtil.build(menus, 0L);
        // 转换成json
        String json = TreeUtil.buildJson(treeList, 0L);

        model.addAttribute("menu", json);
        return "admin/menu";
    }
}

菜单的的组成关系是通过每个菜单项的parentId来表示的,一般来说根节点的parentId值为0。在上述代码中,我们以0为根节点,将菜单列表转换成了树形结构,并且转成了json格式返回给前端渲染。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java TreeUtil菜单递归工具类 - Python技术站

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

相关文章

  • 解决bind错误bind:addressalreadyinuse

    以下是详细讲解“解决bind错误bind:address already in use的完整攻略”的标准Markdown格式文本: 解决bind错误bind:address already in use 在使用bind命令绑定端口时有时会出现“bind: address already in use”的错误。这个错误通常是由于端口已经被其他进程占用而导致的。…

    other 2023年5月10日
    00
  • 苹果IPAD与苹果IPHONE配置IP地址方法图解

    苹果IPAD与苹果IPHONE配置IP地址方法图解攻略 步骤一:打开设置 首先,我们需要打开设备的设置菜单。在主屏幕上找到并点击“设置”图标。 步骤二:选择Wi-Fi 在设置菜单中,向下滚动并找到“Wi-Fi”选项。点击它以进入Wi-Fi设置页面。 步骤三:选择网络 在Wi-Fi设置页面,您将看到可用的Wi-Fi网络列表。找到您要连接的网络,并点击它。 步骤…

    other 2023年7月30日
    00
  • Python的Django框架中URLconf相关的一些技巧整理

    下面是详细讲解“Python的Django框架中URLconf相关的一些技巧整理”的完整攻略。 简介 URLconf是Django框架中常用的模块之一,它可以将URL地址映射到相应的视图函数,并且可以通过正则表达式来匹配不同的URL地址。 在本文中,我们将会介绍一些Django框架中URLconf相关的最常用的技巧和用法。 常用语法 基本语法 Django框…

    other 2023年6月27日
    00
  • Spring Boot快速实现 IP地址解析的示例详解

    Spring Boot快速实现IP地址解析的示例详解 在本攻略中,我们将使用Spring Boot框架来快速实现IP地址解析的功能。IP地址解析是将IP地址转换为地理位置信息的过程,可以用于统计分析、风险控制等应用场景。 步骤一:添加依赖 首先,我们需要在pom.xml文件中添加相关依赖。在本示例中,我们将使用GeoIP2库来进行IP地址解析。请确保你已经配…

    other 2023年7月31日
    00
  • Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案

    Android 中 Fragment 嵌套 Fragment 使用存在的 bug 附完美解决方案攻略 在 Android 开发中,使用 Fragment 嵌套 Fragment 是一种常见的方式来构建复杂的用户界面。然而,这种方式可能会导致一些 bug,例如子 Fragment 的生命周期管理问题和视图层级混乱等。本攻略将详细讲解这些问题,并提供完美的解决方…

    other 2023年7月28日
    00
  • ubuntu下安装使用nvm

    以下是Ubuntu下安装使用nvm的完整攻略,包含两个示例: 步骤1:安装nvm 在Ubuntu中安装nvm的最简单方法是使用curl命令。打开终端并输入以下命令: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash 这将下载并运行nvm的安装脚本。安…

    other 2023年5月6日
    00
  • Ubuntu系统下网络配置文件解析与说明

    下面我将详细讲解“Ubuntu系统下网络配置文件解析与说明”的完整攻略: Ubuntu系统下网络配置文件解析与说明 什么是网络配置文件? 在Ubuntu系统中,网络配置文件用于配置网络连接和网络设备。配置文件通常存储在/etc/netplan/目录下。该目录中包含一个或多个*.yaml文件,每个文件都包含一个或多个网络配置。 每个网络配置文件包含以下字段: …

    other 2023年6月25日
    00
  • VS2013外部头文件和源文件怎么添加?

    当我们需要在Visual Studio 2013中使用外部的头文件和源文件时,可以按照以下步骤: 添加头文件 在Solution中创建一个新项目。 在新项目下添加一个头文件(文件名的后缀为.h),比如我们创建一个名为”myheader.h”的头文件。 将需要包含的头文件内容复制到myheader.h中,例如: #ifndef MYHEADER_H #defi…

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