背景:

三级树实现效果

这里只介绍,查询数据库,构建三级目录的后端业务逻辑

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<>());
}
}

最新文章

  1. 32位Windows 7系统下,显示4G内存3G可用的原因。
  2. Android 播放在线视频
  3. Redis3.0.7 cluster/集群 安装配置教程
  4. img base64
  5. 夺命雷公狗---DEDECMS----10dedecms双标签
  6. sqlserver取得本月一号
  7. [搜片神器]之DHT网络爬虫的C++程序初步开源
  8. VS2010制作网站自定义安装程序 转
  9. Xcode7 使用NSURLSession发送HTTP请求报错
  10. 使用 C# (.NET Core) 实现命令设计模式 (Command Pattern)
  11. windows7搜索python java go php等其他文件内容
  12. String与StringBuffer
  13. SpringBoot多模块项目打包问题
  14. Mysql取随机数据效率测试(200W条中读取100条)
  15. selenium&#160;之百度搜索,结果列表翻页查询
  16. Thinkphp 中的自动验证 上一篇有例子
  17. JVM调优之jstack找出最耗cpu的线程、定位代码
  18. LightOJ - 1030 期望+dp
  19. DRF的权限和频率
  20. qr 生成二维码

热门文章

  1. ServletFileUpload 文件上传
  2. Linux 破解mysql密码(详细步骤)
  3. rh358 003 ansible部署双网卡绑定 DNS原理 bind正向解析
  4. PostgreSQL 与 Oracle 访问分区表执行计划差异
  5. spark 写入数据到Geomesa(Hbase)
  6. MAC MySQL安装配置
  7. 如何干涉MySQL优化器使用hash join
  8. maxHBLT的合并&amp;初始化&amp;时间复杂度分析
  9. java~springboot(2022之后)~目录索引
  10. 【疑难杂症】奇异值分解(SVD)原理与在降维中的应用