首页 > 编程语言 >TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频

TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频

时间:2022-11-18 10:56:10浏览次数:71  
标签:name 代码 parentId TreeUtils 列表 转树 id 三级

一、序言

在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单、多级目录、多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率。

本文将基于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": []
            }
          ]
        }
      ]
    }
  ]
}

三、小结

通过一个小小的高频业务场景,抽离业务共性,屏蔽业务细节,实现了通用型业务逻辑的编码。

希望广大技术朋友在完成日常开发工作的前提下,能够进一步打磨代码,感受编程之美。

标签:name,代码,parentId,TreeUtils,列表,转树,id,三级
From: https://www.cnblogs.com/javazhishitupu/p/16902479.html

相关文章

  • 我把 CPU 三级缓存的秘密,藏在这 8 张图里
    本文已收录到 GitHub·AndroidFamily,有Android进阶知识体系,欢迎Star。技术和职场问题,请关注公众号[彭旭锐]进Android面试交流群。前言大家好,我是小彭。在......
  • 常用的用户名和密码的三级验证
    //用户名匹配exportfunctionnameRule(rule,value,callback){//请输入4-10位昵称letreg=/(^[a-zA-Z0-9]{4,10}$)/;if(value===""){callback(newError("......
  • java三级菜单遍历
     java三级菜单遍历@OverridepublicList<YjztCity>getYjzt(){List<YjztCity>yjztCities=yjztCityMapper.selectByExample(null);//先获取你想要......
  • Spring三级缓存解决循环依赖
    前提知识1、解决循环依赖的核心依据:实例化和初始化步骤是分开执行的2、实现方式:三级缓存3、lambda表达式的延迟执行特性spring源码执行逻辑核心方法refresh(), populateBea......
  • 【Vue】可编辑表格与三级联动下拉
    需求是给员工分配岗位,设计上是一人多岗的存在...单位—— 部门—— 岗位 这样的层级功能效果:因为员工可以在不同的单位下任职岗位,所以这个每一个岗位都是一个独立......
  • 三级指针动态分配/释放内存(C / C++)
    C语言版本#include<stdio.h>#include<stdlib.h>#definehigh2#definerow3#definecol4intmain(){inti,j,k;//p[2][3][4]int......
  • Spring三级缓存解决循环依赖
    前提知识1、解决循环依赖的核心依据:实例化和初始化步骤是分开执行的2、实现方式:三级缓存3、lambda表达式的延迟执行特性spring源码执行逻辑    核心方法refres......
  • 为企业升级黑龙江市政工程施工总承包三级升二级资质
    黑龙江省:市政工程施工总承包三级升二级资质,省内地区不限,包括哈尔滨、齐齐哈尔、鸡西市、大庆市、黑河市,稳拿资质,成功哪里众多。二级资质标准:1、企业资产净资产4000万元......
  • js 数组转树形结构
    1、递归方式constlist=[{id:'001',name:'节点1'},{id:'0011',parentId:'001',name:'节点1-1'},{id:'00111',parentId:'0011',name:'节点......
  • Spring 循环依赖及三级缓存
    感谢一下文章​​Spring循环依赖及三级缓存​​​​Sping三级缓存源码执行流图​​​​Spring中的循环依赖​​循环依赖总结一下(假设A,B之间循环依赖):一级缓存singletonObj......