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选项的对勾即可
随机推荐
- ubuntu通过windows下的ccproxy代理上网
网上教程很多,需要注意的是将ubuntu的ip和windows的Ip设置到同一个网段,即子网掩码是1的对应的部分要相同.由于没有配置到同一个网段,折腾了我好久.
- python正则表达式 分割字符串
使用或 标准的正则表达式有小括号,但是python的没有 # -*- coding: utf-8 -*- import sys import re import sys reload(sys) sys ...
- Windows环境下Mysql 5.7读写分离简单记录
一.目的 本文记录了在Windows环境中,mysql数据库读写分离配置过程. 二.准备: Master机器:Windows 10 虚拟机,IP:192.168.3.32 Slave机器:Window ...
- Python 笔试集(1):关于 Python 链式赋值的坑
前言 Python 的链式赋值是一种简易型批量赋值语句,一行代码即可为多个变量同时进行赋值. 例如: x = y = z = 1 链式赋值是一种非常优雅的赋值方式,简单.高效且实用.但同时它也是一个危 ...
- windows 10 取消alt+tab的预览功能
1.win+r 输入regedit打开注册表编辑器 2.HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer 3. ...
- DOM4J解析文件
转发一篇好文 DOM4J解析文件 Dom4j和Xpath
- JS函数的基础部分
JS函数的基础部分 JS函数的部分: 先看下一段的代码: window.onload = function(){ function test(){ alert("123"); ...
- Spring MVC对日期处理的不友好问题
一.后台日期类型解析到前端 1.在springmvc的配置文件中添加这个.annotation-driven在配置文件中只配置一次 (此方法全局作用)<mvc:annotation-dr ...
- struts2默认action设置了却访问不到
1.错误原因 我的package中共有两个action,第一个是默认action,用于访问的action不存在时候的出错处理,第二个是通配符方式写的action,name采用*_*形式的全通配符.配置 ...
- JS图片宽度自适应移动端
$(function(){ $("#d-intro").find("img").each(function () { $(this ...