java查询三级树(三级目录)
2024-08-31 18:13:03
背景:
三级树实现效果
这里只介绍,查询数据库,构建三级目录的后端业务逻辑
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<>());
}
}
最新文章
- 32位Windows 7系统下,显示4G内存3G可用的原因。
- Android 播放在线视频
- Redis3.0.7 cluster/集群 安装配置教程
- img base64
- 夺命雷公狗---DEDECMS----10dedecms双标签
- sqlserver取得本月一号
- [搜片神器]之DHT网络爬虫的C++程序初步开源
- VS2010制作网站自定义安装程序 转
- Xcode7 使用NSURLSession发送HTTP请求报错
- 使用 C# (.NET Core) 实现命令设计模式 (Command Pattern)
- windows7搜索python java go php等其他文件内容
- String与StringBuffer
- SpringBoot多模块项目打包问题
- Mysql取随机数据效率测试(200W条中读取100条)
- selenium&#160;之百度搜索,结果列表翻页查询
- Thinkphp 中的自动验证 上一篇有例子
- JVM调优之jstack找出最耗cpu的线程、定位代码
- LightOJ - 1030 期望+dp
- DRF的权限和频率
- qr 生成二维码
热门文章
- ServletFileUpload 文件上传
- Linux 破解mysql密码(详细步骤)
- rh358 003 ansible部署双网卡绑定 DNS原理 bind正向解析
- PostgreSQL 与 Oracle 访问分区表执行计划差异
- spark 写入数据到Geomesa(Hbase)
- MAC MySQL安装配置
- 如何干涉MySQL优化器使用hash join
- maxHBLT的合并&;初始化&;时间复杂度分析
- java~springboot(2022之后)~目录索引
- 【疑难杂症】奇异值分解(SVD)原理与在降维中的应用