Hutool工具TreeUtil构建树形结构

1.导入依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><version>5.8.36</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>

2.准备数据

3.构建数据

    @RequestMapping("/test2")public Object test2() {// 准备数据List<Department> departments = new ArrayList<>();departments.add(new Department(1L, 0L, "总公司", "1",0,123));departments.add(new Department(2L, 1L, "研发部","2",11,456));departments.add(new Department(3L, 1L, "市场部","3",9,789));departments.add(new Department(4L, 2L, "后端组","4",18,112));departments.add(new Department(5L, 2L, "前端组","5",15,167));List<Tree<Long>> tree1 = TreeUtil.build(departments, 0L,(treeNode, tree) -> {tree.setId(treeNode.getId());tree.setName(treeNode.getName());tree.setParentId(treeNode.getParentId());});return tree1;}

方法参数说明:

  • TreeUtil.build(数据集合, 根节点ID, 树节点配置, 节点转换器)
  • 数据集合:需要转换的原始数据列表(如 departments)
  • 根节点ID:顶级节点的父ID值(示例中 0L 表示总公司为根)
  • 树节点配置:TreeNodeConfig 可自定义字段映射(可选参数)
  • 节点转换器:BiConsumer 用于设置节点属性

代码示例分析

TreeUtil.build(departments, 0L, (treeNode, tree) -> {tree.setId(treeNode.getId());tree.setName(treeNode.getName());tree.setParentId(treeNode.getParentId());
})未传入 TreeNodeConfig 参数,采用默认字段映射:
* id 字段:id
* parentId 字段:parentId
* 子节点字段:children
* 权重字段:weight

更改默认字段


添加额外的字段,可以是对象,集合

注意事项

  • 数据对象必须包含 id 和 parentId 字段
  • parentId的值需与某个节点的 id 匹配(根节点 parentId 需与参数中的根ID一致)
  • 确保数据中没有循环引用(如 A 的 parent 是 B,B 的 parent 又是 A)

总结:通过该工具类可快速将扁平列表转换为嵌套树结构,适用于菜单、组织架构等场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/909768.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20241101 2024-2025-2 《Python程序设计》实验二报告

20241101 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2411 姓名:苏萱 学号:20241101 实验教师:王志强 实验日期:2025.3.26 必修/选修: 公选课 (一)实验内容 1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 2.考核…

8种核心架构图作用解析

一、架构图是什么?架构图就像人体的骨架决定身体结构一样,架构图是组织/系统的"骨架说明书"。它把复杂事物最关键的顶层结构画成视觉地图,帮助我们5分钟看懂一个体系的构造。 常见的有8种类型,都是企业管理的"导航地图"。 二、8大核心架构图详解业务架…

2024-2025-2 《Python程序设计》实验二报告

学号 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2413 姓名: 廖江泽 学号:20241311 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容设计并完成一个完整的计算器,完成加减乘除模等运算,功能多多益善;考核基本语…

《C Primer Plus 中文版 (第6版)》2020版最新修订版PDF下载

《C Primer Plus(第6版)中文版》在之前版本的基础之上进行了全新升级,它涵盖了C语言最新的进展以及C11标准的详细内容。本书还提供了大量深度与广度齐备的教学技术和工具,来提高你的学习。内容简介豆瓣评分9.1 重量级C大百科全书 中文版累计销量近百万册! C图书领域的独孤…

蓝桥杯2

今天写了写选择结构的题

ubuntu配置cuda和cudnn

nvidia-smi 查看当前驱动 https://developer.nvidia.com/cuda-toolkit-archive 选择匹配的驱动下载.run文件 sudo sh cuda****如果已经安装过显卡驱动,就不要再重复安装驱动了,按enter取消driverDriver: Not Selected Toolkit: Installed in /usr/local/cuda-12.4/ Please…

卢曼卡片盒笔记法介绍 Introduction to the Zettelkasten Method

你可能在工作中遇到了迫切需要解决的问题,可能被硕士论文压得喘不过来气,你想要提升你的博客水平,想写一本书,或者想在科研上更进一步。但是有一点需要明确,卡片盒笔记法不仅是一个帮助你完成工作或项目的工具,更是管理你生活中所遇到的知识的方法。原文链接:https://ze…

javawebDay5-Maven框架

单元测试右侧参数代表测试当前类的各项比例 Class:调用测试类中类 Method:调用方法比例 Line:调用代码量比例问题:目前猜测是用户名为中文导致

量化的前期准备

我看了不少国内量化的软件, 很多都在说QMT 迅投公司的产品, 专卖给券商, 然后券商给优质用户开 号就可以了。 各个券商的要求各不一样。 我这个因为我很多板块要求50w 存20工作日, 放了进去,居然符合券商要求了,答应给我开通了。 其实现在 很多开源的 比如easy trader 的…

[Tools] 使用 HammerDB 对 SQL Server 执行负载测试

HammerDBhttps://www.hammerdb.com/download.html HammerDB 是全球数据库行业最值得信赖的免费开源数据库基准测试应用程序,支持 Microsoft SQL Server、IBM Db2、Oracle、PostgreSQL、MariaDB 和 MySQL。HammerDB 在 Windows 和 Linux 上构建和测试,具有无与伦比的性能和可扩…

0401-git如何忽略已被版本控制的文件

前言 原因 我有很多的不关心的文件,这些都被版本控制了,我会感觉很扰乱自己的思路参考 https://www.cnblogs.com/yulinlewis/p/10236563.html 解决方法 1. 先删 git rm --cache *.pyc2. 加入.gitignore里 .gitignore文件内容 Code/.vs/ *.pyc !.gitignore效果这样就清爽多了,…