java TreeUtil菜单递归工具类

yizhihongxing

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日

相关文章

  • 新版maven3.6.1下载与安装

    下面是关于“新版maven3.6.1下载与安装”的完整攻略: 1. 下载maven3.6.1 首先,我们需要从官方网站下载maven3.6.1的安装包。可以在以下链接中找到maven3.6.1的下载链接:https://maven.apache.org/download.cgi 选择合适版本下载,这里以apache-maven-3.6.1-bin.tar.g…

    other 2023年5月7日
    00
  • 怎么换IP地址?相当简单有效的换IP方法

    怎么换IP地址?相当简单有效的换IP方法 方法一:使用VPN服务 下载并安装一个可靠的VPN应用程序,例如[NordVPN](https://go.nordpass.io/aff_c?offer_id=488&aff_id=89709&url_id=9356 “NordVPN”)、ExpressVPN或Surfshark。 打开VPN应用程序并创建一个新的帐…

    other 2023年7月30日
    00
  • Java Web学习之MySQL在项目中的使用方法

    Java Web学习之MySQL在项目中的使用方法 MySQL是一种常用的关系型数据库,可以在Java Web项目中使用。以下是在项目中使用MySQL的完整攻略: 步骤一:导入MySQL驱动 在项目的pom.xml文件中添加MySQL驱动的依赖: <dependencies> <!– MySQL驱动 –> <dependen…

    other 2023年10月14日
    00
  • 在校外时利用easyconnect连接西工大校园内网

    下面是关于“在校外时利用easyconnect连接西工大校园内网”的完整攻略: 1. EasyConnect简介 EasyConnect是一种VPN客户端,可以帮助用户在校外连接学校的内。EasyConnect支持多种操作系统,包括Windows、MacOS、Linux等。 2. EasyConnect连接工大校园内网的步骤 下面是连接西工大校园内网的步骤:…

    other 2023年5月7日
    00
  • AngularJS Controller作用域

    AngularJS Controller作用域攻略 AngularJS是一个流行的JavaScript框架,用于构建Web应用程序。在AngularJS中,Controller是一个重要的概念,它用于管理应用程序的数据和逻辑。Controller作用域是指Controller与视图之间的连接,它定义了Controller中可用的变量和函数。 创建Contro…

    other 2023年8月19日
    00
  • php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例

    PHP使用mysqli和pdo扩展,测试对比MySQL数据库的执行效率完整示例攻略 1. 准备工作 在开始测试之前,确保您已经安装了PHP、MySQL数据库,并且已经启用了mysqli和pdo扩展。 2. 创建测试数据库和表 首先,创建一个名为testdb的数据库,并在其中创建一个名为users的表,用于测试。 CREATE DATABASE testdb;…

    other 2023年10月18日
    00
  • ie浏览器的版本号是多少?win10系统查看ie浏览器版本号的方法

    以下是关于“IE浏览器的版本号是多少?Win10系统查看IE浏览器版本号的方法”的完整攻略,包括IE浏览器版本的介绍、Win10系统查看IE浏览器版本号的方法、示例说明和注意事项。 IE浏览器版本号的介绍 IE浏览器是微软公司开发的一款Web浏览器,它的版本号通常以数字和小数点组成,例如IE11、IE10等。 Win10系统查看IE浏览器版本号的方法 在Wi…

    other 2023年5月8日
    00
  • Go语言利用接口实现链表插入功能详解

    Go语言利用接口实现链表插入功能详解 简介 本篇攻略将会介绍如何使用Go语言的接口来实现链表的插入功能。链表是一种常用的数据结构,可以方便地在其中插入和删除元素。通过实现链表的插入功能,我们可以更全面地理解接口在Go语言中的应用。 链表结构体 在实现链表之前,我们需要定义一个链表的结构体。该结构体包含两个字段,一个是链表的元素值,另一个是后继指针。 type…

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