TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频
一、序言
在日常一线开发过程中,总有列表转树
的需求,几乎是项目的标配,比方说做多级菜单、多级目录、多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率。
本文将基于Java8的Lambda 表达式和Stream等知识,使用TreeUtils
工具类实现一行代码完成列表转树这一通用型需求。本文有配套视频,传送门直达。
二、实战编码
1、引入坐标
本坐标地址包含TreeUtils
工具类方法,已经发布到Maven中央仓库,建议使用最新的版本号,本文法布施版本是1.5.8
。
学习源码的朋友,源码直通车
<dependency>
<groupId>xin.altitude.cms</groupId>
<artifactId>ucode-cms-common</artifactId>
<version>1.5.8</version>
</dependency>
2、实现接口
列表实体类实现ITreeEntity
并实现抽象方法。
/**
* 类别表
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "bu_category")
public class Category implements ITreeEntity<String> {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private String id;
private String name;
private String parentId;
}
3、调用TreeUtils工具类
在服务层调用TreeUtils工具类,一行代码完成转换。
public List<TreeNode<String>> selectCategoryList2() {
List<Category> list = this.list();
// 一行代码实现列表转树结构 通用型代码 能够跨项目使用 业务解藕
return TreeUtils.createNode(list, "000000");
}
4、效果展示
原始列表数据
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "电子商务",
"parentId": "000000"
},
{
"id": "310100",
"name": "大宗商品",
"parentId": "310000"
},
{
"id": "310101",
"name": "大宗商品综合",
"parentId": "310100"
},
{
"id": "310102",
"name": "钢铁类电商",
"parentId": "310100"
}
]
}
树状层次数据
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "电子商务",
"childList": [
{
"id": "310100",
"name": "大宗商品",
"childList": [
{
"id": "310101",
"name": "大宗商品综合",
"childList": []
},
{
"id": "310102",
"name": "钢铁类电商",
"childList": []
}
]
}
]
}
]
}
三、小结
通过一个小小的高频业务场景,抽离业务共性,屏蔽业务细节,实现了通用型业务逻辑的编码。
希望广大技术朋友在完成日常开发工作的前提下,能够进一步打磨代码,感受编程之美。
TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频的更多相关文章
- 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...
- 使用JCrop进行图片裁剪,裁剪js说明,裁剪预览,裁剪上传,裁剪设计的图片处理的工具类和代码
1.要想制作图片裁剪功能,可以使用网上的裁剪工具JCrop,网址是:https://github.com/tapmodo/Jcrop/ 案例效果如下: 2.引入JCrop的js代码,具体要引入那 ...
- html便民查询各个工具类实例代码分享(支持pc和移动端)
1.手机号码查询 <iframe id="api_iframe_51240" name="api_iframe_51240" src="&quo ...
- android开发时间和日期的代码实现工具类(一)
android开发时间和日期工具类的代码实现: package com.gzcivil.utils; import android.annotation.SuppressLint; import an ...
- xml与java代码相互装换的工具类
这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- java(List或Array数组)求交集、并集、差集, 泛型工具类
业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...
- JDBC工具类连接数据库,模仿登录
## 使用JDBC工具类的原因在使用JDBC连接数据库的时候,加载驱动.获取连接.释放资源等代码是重复的,所有为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载.获取连接.资源释放的代码封装 ...
- java树形结构工具类
一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...
- POI导入导出excel(附工具类)
关于POI导出excel的功能我在前面的文章已经写过了,POI导出excel的三种方式 , 导出表格数据到excel并下载(HSSFWorkbook版) ,本篇文章主要是将导入导出功能进一步地封装,在 ...
随机推荐
- 利用userfaultfd + setxattr堆占位
利用userfaultfd + setxattr堆占位 很久之前便看到过这个技术的名字,但是由于自己的摆烂,一直没有管.今天终于找到时间好好看一下这个技术的利用方式.利用userfaultfd + s ...
- 03-MyBatisPlus的CRUD 接口
一.insert 1.插入操作 @RunWith(SpringRunner.class) @SpringBootTest public class CRUDTests { @Autowired pri ...
- 2020年12月-第02阶段-前端基础-CSS Day06
CSS Day06 定位(position) 理解 能说出为什么要用定位 能说出定位的4种分类 能说出四种定位的各自特点 能说出我们为什么常用子绝父相布局 应用 能写出淘宝轮播图布局 1. CSS 布 ...
- G&GH05 删除文件和.gitignore
注意事项与声明 平台: Windows 10 作者: JamesNULLiu 邮箱: jamesnulliu@outlook.com 博客: https://www.cnblogs.com/james ...
- Logstash:导入zipcode CSV文件和Geo Search体验
- MySQL一致性读原来是有条件的
众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读.换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响. 以 ...
- flask-bootstrap 模版中所需的CSS/JS文件实现本地引入
Flask-Bootstrap默认是加载CDN的css与js文件,每次刷新页面都要访问到外网的cdn来获取css与js文件; 模版扩展来自于bootstrap/base.html,就以bootstra ...
- Vmware虚拟机设置主机端口映射
转载自:https://blog.csdn.net/Mrqiang9001/article/details/80820321
- 第三周python作业
import datetime mot = ["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择.", "今天星期二:\n含泪播种的人一定会笑着收." ...
- BinaryBombs(二进制炸弹实验)
实验介绍 使用所学知识拆除Binary Bombs来增强对程序的机器级表示.汇编语言.调试器和逆向工程等理解. Binary Bombs(二进制炸弹)是一个可执行程序,是C语言编译链接成的,包含pha ...