Java数据封装成树形结构,多级
参考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147
1、实体类
@data
public class PublishServiceType implements Comparable<PublishServiceType>{ /**
*
*/
private static final long serialVersionUID = -3572108154932898825L; /*
* @see {code}
* @comment 类型标识
*/
private String code;
/*
* @see {createtime}
* @comment 创建时间
*/
private java.util.Date createtime;
/*
* @see {defaultmanual}
* @comment 服务类型默认使用手册
*/
private String defaultmanual;
/*
* @see {description}
* @comment 服务类型描述
*/
private String description;
/*
* @see {id}
* @comment 主键
*/
private String id;
/*
* @see {isdelete}
* @comment 是否可以删除
*/
private Integer isdelete;
/*
* @see {lastmodifytime}
* @comment 最近修改时间
*/
private java.util.Date lastmodifytime;
/*
* @see {name}
* @comment 服务类型名称
*/
private String name;
/*
* @see {parentid}
* @comment 服务类型父节点
*/
private String parentid; /**
* 排序
*/
private Integer sort; private List<PublishServiceType>children;
}
2、数据封装
@Override
public List<PublishServiceType> findList(String name) {
List<PublishServiceType>list = publishServiceTypeMapper.findByName(name);
if (JudgeUtil.isEmpty(list)){
return null;
}
//父子级组装
return parentAndChildren(list);
}
private List<PublishServiceType>parentAndChildren(List<PublishServiceType> list){ //最顶层根节点
List<PublishServiceType>rootList = new ArrayList<>();
//非最顶层根节点
List<PublishServiceType>bodyList = new ArrayList<>();
for (PublishServiceType publishServiceType : list) {
if (StringUtils.isBlank(publishServiceType.getParentid())){
rootList.add(publishServiceType);
}else{
bodyList.add(publishServiceType);
}
}
return getTree(rootList,bodyList);
} public List<PublishServiceType> getTree(List<PublishServiceType>rootList, List<PublishServiceType>bodyList){
if (!JudgeUtil.isEmpty(bodyList)){
//声明一个map,用来过滤已操作过的数据
Map<String,String> map = new HashMap<>(bodyList.size());
rootList.forEach(parent->getChild(parent,bodyList,map));
return rootList;
}else{
return rootList;
}
} private void getChild(PublishServiceType parent,List<PublishServiceType>bodyList, Map<String,String> map){
List<PublishServiceType>childList = new ArrayList<>();
bodyList.stream().filter(c->!map.containsKey(c.getId()))
.filter(c->c.getParentid().equals(parent.getId()))
.forEach(c->{
map.put(c.getId(),c.getParentid());
getChild(c,bodyList,map);
childList.add(c);
}); parent.setChildren(childList);
}
3、结果
{
"code": 20000,
"message": "成功",
"data": [
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
"isdelete": -1,
"lastmodifytime": null,
"name": "基础服务",
"parentid": "",
"sort": 1,
"children": [
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "b1779671ef1b45e0a9a8a1edbff03f1e",
"isdelete": -1,
"lastmodifytime": null,
"name": "数据源服务",
"parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
"sort": 2,
"children": [
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "2a38a8254ec348e9b54c9bf4622f23db",
"isdelete": 1,
"lastmodifytime": null,
"name": "测试添加数据库服务2",
"parentid": "b1779671ef1b45e0a9a8a1edbff03f1e",
"sort": null,
"children": []
}
]
},
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "d4f3b047dc2d467a9b404ded8acf4673",
"isdelete": 1,
"lastmodifytime": null,
"name": "text_lsa",
"parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
"sort": null,
"children": []
}
]
},
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "af1b4a4d2f074fa19e1dae0a5540a5bf",
"isdelete": 1,
"lastmodifytime": null,
"name": "测试添加1",
"parentid": "",
"sort": null,
"children": []
},
{
"code": null,
"createtime": null,
"defaultmanual": null,
"description": null,
"id": "62e15d859a224126884888a55df355a7",
"isdelete": 1,
"lastmodifytime": null,
"name": "测试添加2",
"parentid": "",
"sort": null,
"children": []
}
]
}
Java数据封装成树形结构,多级的更多相关文章
- c# List列表数据转换成树形结构
把List列表结构 转换成树形结构 /// <summary> /// 构造树形Json /// </summary> public static class TreeJson ...
- 使用js将后台返回的数据转换成树形结构
将类似如下数据转换成树形的数据: [ { id: 1, name: '1', }, { id: 2, name: '1-1', parentId: 1 }, { id: 3, name: '1-1-1 ...
- 记一则 Lambda内递归调用方法将集合对象转换成树形结构
public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...
- javascript将平行的拥有上下级关系的数据转换成树形结构
转换函数 var Littlehow = {}; /** * littlehow 2019-05-15 * 平行数据树形转换器 * @type {{format: tree.format, sort: ...
- 《Java数据结构》树形结构
树形结构是一层次的嵌套结构. 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示.经典数据结构中的各种树形图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树. 左子 ...
- java list实现树形结构
1.javabean import java.util.List; public class TreeNode { private String id; private String parentId ...
- Word排版成树形结构技巧
初始文字 A A1 A2 B1 B1 B2 C C1 希望效果 关健设置
- dom4j 解析字符串成树形结构
引入maven依赖: <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artif ...
- idea目录结构子目录在父目录后面跟着改成树形结构
1.点击项目窗口的设置按钮 2.取消Compact Middle Packages选项的对勾即可
随机推荐
- mysql 字符串字段中查找非ascii字符
select * from tabel_name where field_name not regexp "^[ -~]*$"
- leetcode-mid-design-380. Insert Delete GetRandom O(1)
mycode import random class RandomizedSet(object): def __init__(self): """ Initialize ...
- 八、RF的内置变量
1.表示“空”的变量 ${EMPTY} 空 适用输入空的案例 2.表示“空格”的变量 ${SPACE} 空格,如果是需要5个空格可以这样写${SPACE*5} 3.目录的绝对路径 ${CURDIR} ...
- maven 配置参数详解!
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- python调用c/c++时传递结构体参数
背景:使用python调用linux的动态库SO文件,并调用里边的c函数,向里边传递结构体参数.直接上代码 //test1.c # include <stdio.h> # include ...
- JVM监控工具之JProfiler
一.简介 JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况,线程运行情况(阻塞.等待等),同时可以查找哪个对象占用的内存比较多.哪个对象占用CPU ...
- Web UI自动化测试基础——元素定位(二)
本篇文章整理了元素定位的基础知识——多个元素定位方式. 一.多个元素定位方式简介 同单个元素定位方式相同,多个元素定位方式也有与之对应的8种方式,即id.name.class_name.tag_nam ...
- sentos7网卡改名
一.已经装好系统CentOS7修改网卡为eth0 1. 修改网卡配置文件[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens3 ...
- 基于 Timer是一种定时器工具
没有依赖 通过Timer中的schedule方法启动定时任务 一般不采用此方法 /** * ------------------------------------------------------ ...
- 六、Zabbix-自动分组
一.配置Zabbix server 1.创建主机组 (2)配置—>主机群组—>创建主机群组 (2)Next Step (3)可以看到新添加的主机组 2.添加自动分组动作 配置—>动作 ...