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日

相关文章

  • win7安装中升级安装和自定义安装有什么区别

    Win7的安装方式可以分为升级安装和自定义安装两种,它们之间主要的区别在于数据保留和安装文件的选择,下面我会详细讲解一下。 升级安装 升级安装指的是在原有的操作系统基础上进行更新和升级,数据、应用程序以及用户个性化设置会被保留下来,通常比较适用于针对系统版本升级。 升级安装的步骤如下: 运行Win7安装光盘或者USB,选择升级安装; 接下来会执行系统兼容性检…

    other 2023年6月25日
    00
  • 苹果电脑的Mac系统安装应用程序(软件)的方法(图文教程)

    苹果电脑的Mac系统安装应用程序(软件)的方法(图文教程) 1. 从App Store下载安装 步骤如下: 打开App Store 在搜索框中输入软件名称或关键字 找到相应的软件,然后点击“获取”或“安装”按钮 输入Apple ID和密码进行确认 下载完成后,在“启动台”中找到并打开软件 示例说明1:下载并安装“Pages” 打开App Store 在搜索框…

    other 2023年6月25日
    00
  • 使用spring.profiles.active来分区配置的方法示例

    使用 spring.profiles.active 配置不同环境的方法示例如下: 在 application.yml 或者 application.properties 中添加不同环境的配置 “` 开发环境配置 spring: profiles: active: dev server: port: 8080 生产环境配置 spring: profiles:…

    other 2023年6月27日
    00
  • 关于sqlserver:如何在sql中自动生成唯一id

    以下是关于“如何在SQL Server中自动生成唯一ID”的完整攻略,包含两个示例。 背景 在SQL Server中,我们经常需要为表中的每个记录生成唯一的ID。这个ID可以用作主键或其他用途。在SQL Server中,我们可以使用IDENTITY列或GUID列来生成唯一ID。 使用IDENTITY列生成唯一ID IDENTITY列是SQL Server中一…

    other 2023年5月9日
    00
  • C++ Boost StringAlgorithms超详细讲解

    C++ Boost StringAlgorithms超详细讲解 简介 C++ Boost StringAlgorithms是一个强大的库,提供了许多字符串处理功能。本攻略将详细介绍如何使用Boost StringAlgorithms库来进行字符串操作。 安装Boost StringAlgorithms 首先,你需要安装Boost库。你可以从Boost官方网站…

    other 2023年8月19日
    00
  • Win10年度更新开发必备SDK软件开发工具包预览版下载

    下面是详细讲解“Win10年度更新开发必备SDK软件开发工具包预览版下载”的完整攻略。 必要条件 在开始下载开发工具包之前,你需要满足以下条件: Windows 10 操作系统版本需要是 21H1 及以上。 在安装开发工具包之前,需先安装 Visual Studio 2019 或 Visual Studio 2022,并在安装过程中勾选“通用 Windows…

    other 2023年6月26日
    00
  • Android 调用系统相机拍摄获取照片的两种方法实现实例

    Android 调用系统相机拍摄获取照片的两种方法实现实例 在 Android 开发中,我们经常需要调用系统相机来拍摄照片。下面将详细介绍两种方法来实现这个功能,并提供示例代码。 方法一:使用 Intent 调用系统相机应用 这种方法是最简单的方式,通过创建一个 Intent 对象并指定相机动作,然后启动系统相机应用。相机应用会处理拍摄照片的过程,并将结果返…

    other 2023年8月21日
    00
  • Linux常用硬盘管理相关命令介绍

    Linux是一款广泛使用的操作系统,而硬盘的管理是Linux系统中的一个非常重要的任务。本文将介绍几个Linux常用的硬盘管理命令,详细说明具体用法和注意事项。 1. fdisk命令 fdisk命令是一个分区工具,可以对硬盘进行分区操作。使用fdisk命令需要root权限。 1.1 创建分区 fdisk /dev/sda 使用fdisk命令打开硬盘sda,然…

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