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日

相关文章

  • c#开发wps插件(2)

    C#开发WPS插件(2) 在C#开发WPS插件时,需要使用WPS VBA API和C#互操作技术。以下是详细的攻略: 步骤 以下是开发WPS插件的步骤: 安装WPS开发工具包。 WPS开发具包是开发WPS插件的必备工具。可以从WPS官网下载并安装。 创建C#项目。 在Visual Studio中创建一个C#项目,选择“类库”作为项目类型。 添加WPS VBA…

    other 2023年5月7日
    00
  • uniapp计算属性的使用

    Uniapp计算属性的使用 在Uniapp中,可以使用计算属性来根据已有的数据计算出新的数据。本文将介绍如在app中使用计算属性,并提供两个示例说明。 基本语法 计算属性是一个函数,它接收当前组件的数据对象作为参数,并返回一个新的数据对象。计算属性的基本语法如下: computed: { propertyName: function() { // 计算并返回…

    other 2023年5月7日
    00
  • windows7下mysql8.0.18部署安装教程图解

    下面是详细讲解: Windows 7下MySQL 8.0.18部署安装教程图解 简介 MySQL是当前世界最为流行的开源数据库之一,它易于安装、使用和管理,并且具有高可用性和高效性,是Web应用开发的首选数据库。本文介绍了Windows 7下MySQL 8.0.18的部署安装教程,并配有详细的图解,以供参考。 步骤 1. 下载MySQL 访问MySQL官网 …

    other 2023年6月26日
    00
  • 带你深入了解java-代理机制

    带你深入了解 Java 代理机制 代理机制是 Java 语言的一个重要特性,它允许我们在运行时生成一个替代某个对象的对象,从而能够控制访问、修改被代理对象的属性或方法。在本文中,我们将深入讲解 Java 的代理机制,包括代理类型、创建方式、使用场景等。 代理类型 Java 语言中有两种代理类型:静态代理和动态代理。 静态代理 静态代理是指在编译时确定代理类和…

    other 2023年6月26日
    00
  • A,B,C类的IP地址详细介绍

    IP地址分类详细介绍 IP地址是用于在互联网上唯一标识设备的一组数字。根据其特定的规则,IP地址可以分为A类、B类和C类。下面将详细介绍每个类别的IP地址。 A类IP地址 A类IP地址是最常见的IP地址类型,其范围从1.0.0.0到126.0.0.0。A类IP地址的第一个字节范围是1到126,其余三个字节可以用于主机标识。A类IP地址的网络部分占据了第一个字…

    other 2023年7月29日
    00
  • C++将字符串格式化的几种方式总结

    C++将字符串格式化的几种方式总结 在C++中,将字符串格式化的操作是一项非常常见、重要的任务,可以帮助我们将各种类型的数据转换为字符串,以方便输出或者存储。本文将总结C++中字符串格式化的几种方式,并提供相应的示例说明。 1. 字符串流 字符串流是C++ STL中的一个重要组成部分,可以通过头文件中的stringstream来实现。我们可以将各种类型的数据…

    other 2023年6月20日
    00
  • Fragment配合RadioGroup实现点击切换布局

    Fragment配合RadioGroup实现点击切换布局 在Android开发中,我们经常会需要在同一个Activity中切换多个不同的布局,这种情况下可以使用Fragment来实现。Fragment是Android自3.0版本以后推出的一种组件,它可以作为Activity中的一个子模块,能够独立地管理自己的界面和逻辑,也可以与其他Fragment组合在一起…

    其他 2023年3月28日
    00
  • Android下拉刷新上拉加载控件(适用于所有View)

    Android下拉刷新上拉加载控件 在 Android 开发中,下拉刷新和上拉加载是一种常用的业务需求。为了方便开发者使用,有很多第三方控件可以供我们使用。本文将介绍一款适用于所有 View 的下拉刷新上拉加载控件。 控件介绍 本控件基于 Android 的 NestedScrolling 机制来实现下拉刷新和上拉加载,可以使用在 RecyclerView、…

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