java查询三级树(三级目录)
背景:
三级树实现效果

这里只介绍,查询数据库,构建三级目录的后端业务逻辑
1.创建查询类(对应数据库需要查出的字段)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnTree {
private Integer value; //当前标签的id
private String label;
private Integer parentId;//当前标签的父id
private List<ColumnTree> children = new ArrayList<>();//递归思想,这个属性将作为子级目录
}
2.service层的业务逻辑
public GlobalResponse findColumnsTree() {
//先查询出数据所有的标签数据列表
List<ColumnTree> columnTrees = columnMapper.selectTreeInfo();
//判断是否有数据
if (CollectionUtils.isNotEmpty(columnTrees)) {
// 过滤所有的一级目录,父id为0
List<ColumnTree> firstColumn = columnTrees.stream().filter(c -> c.getParentId().toString().equals("0")).collect(Collectors.toList());
//查出非一级目录,按照其父id分类
Map<Integer, List<ColumnTree>> collect = columnTrees.stream().filter(c -> !(c.getParentId().toString().equals("0"))).collect(Collectors.groupingBy(ColumnTree::getParentId));
//遍历一级目录
firstColumn.forEach(a -> {
//如果一级目录的id中是否包含非一级目录的父id
if (collect.get(a.getValue()) == null) {
//没有,说明不是该一级目录没有下一级目录,则将其子目录设为空
a.setChildren(new ArrayList<>());
} else {
//有,则说明有二级目录,将二级目录的的List集合,赋给子目录
a.setChildren(collect.get(a.getValue()));
//构建三级树
//遍历二级目录,判断是否含有三级目录
collect.get(a.getValue()).forEach(b -> {
if (collect.get(b.getValue()) == null) {
//没有,将二级目录下的三级目录设为空
b.setChildren(new ArrayList<>());
} else {
//有,将三级目录的List集合,赋给三级目录
b.setChildren(collect.get(b.getValue()));
}
});
}
});
//将firstColumn返回,前端可以通过遍历获取各级目录的数据从而形成三级树的效果
return GlobalResponse.success(firstColumn);
} else {
return GlobalResponse.success(new ArrayList<>());
}
}
java查询三级树(三级目录)的更多相关文章
- Java生成菜单树(目录树)的几种方式
本文介绍两种不同生成多级目录树的方式:1. 递归生成,2. map+list 集合生成.最下方会附上完整代码. 生成树的基本规则:子节点的par_id等于父节点的id. 1. 实体类 import ...
- java算法实现树型目录反向生成(在指定的盘符或位置生成相应的文件结构)
http://www.cnblogs.com/interdrp/p/6702482.html 由于此次文件管理系统的升级确实给我们带来了很多方便且在性能上有很大提升,经过这段时间的使用 也发现了些问题 ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- html结合js实现简单的树状目录
最近在学jsp,期末了要做项目,需要用到树状目录,百度了很多,都没有找到想要的答案,最后自己折腾了半天,才搞定. 下面我就来分享一下怎么实现一个简单的树状目录: 1. 下载jquery-treevie ...
- Java查询大文本
但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法
RDIFramework.NET V2.7 Web版本升手风琴+树型目录(2级+)方法 手风琴风格在Web应用非常的普遍,越来越多的Web应用都是采用这种方式来体现各个功能模块,传统的手风琴风格只支持 ...
- java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询
java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...
- java数据结构之树
树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结 ...
随机推荐
- 「题解报告」Blocks
P3503 Blocks 题解 原题传送门 思路 首先我们可以发现,若 \(a_l\) ~ \(a_r\) 的平均值大于等于 \(k\) ,则这个区间一定可以转化为都大于等于 \(k\) 的.我们就把 ...
- openstack中Nova组件简解
一.Nova组件概述 计算节点通过Nova Computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信. Nova位于Openstack架 ...
- 微信小程序语音提示
一. 老规矩, 先上demo图: 然后通过 wx.createInnerAudioContext 创建内部 audio 上下文 InnerAudioContext 对象 就能播放 filename ...
- Typora自动上传超级详细教程!!
第一步检查环境变量 打开cmd 查看以下环境变量 需要软件: Typora PicGo gitee账号 配置node 配置git 第二步创建gitee仓库 设置仓库名直接创建,因为这里不能直接修改开源 ...
- Jmeter中的JSON提取器用法
一.使用前提 一般来说JSON提取器只适用于响应结果中返回的是json数据 二.需求 在下一个接口调用上一个接口的数据,如:请求1返回的结果,处理以后作为请求2的参数使用. 首先需要下载JSON Ex ...
- 【问题解决】Debian更新源提示InRelease已过期
问题 本人日常用 Debian10 今天在更新源(apt update) 时,出现InRelease文件过期的问题 E: http://mirrors.163.com/debian/dists/bus ...
- 查看pod创建时使用yaml文件内容
除了 kubectl describe pod 以外,另一种获取 Pod 额外信息(除了 kubectl get pod)的方法 是给 kubectl get pod 增加 -o yaml 输出格式参 ...
- Elasticsearch:使用 Nginx 来保护 Elastic Stack
文章转载自:https://elasticstack.blog.csdn.net/article/details/112213364
- 组件化开发1-git命令简洁版
1-给项目添加git git init 2-查询当前状态,(红色显示的为在工作区,绿色为暂缓区) git status 3-提交到暂缓区 git add . 4-提交到本地仓库('xxxx'里面为注释 ...
- SQLyog企业版
一.下载与安装 1.SQLyog的下载 链接:https://www.aliyundrive.com/s/11ZuFqB1z4E提取码:63fu 2.SQLyog的安装 双击下载程序,可以选择默认安装 ...