zoukankan      html  css  js  c++  java
  • java查询三级树(三级目录)

    背景:

    三级树实现效果

    image-20210423151426027

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

    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<>());
            }
          }
    
  • 相关阅读:
    arduino链接GY521(MPU6050)模块
    I2C Python Library ITG3205 API
    [翻译]AxureInteractive Prototypes原型设计工具Axure学习第2.3节
    [Java]XML数据的请求和DOM技术解析
    [Linux]VI相关操作
    mysql数据库连接错误问题
    关于管理单元初始化失败的解决方法
    彻底明白Java的IO系统(网上找的,还没看,先放这)
    一个关于C++ Inline关键字的引发的一个错误
    orcale 中日期类型相加的处理
  • 原文地址:https://www.cnblogs.com/wtao0730/p/14694203.html
Copyright © 2011-2022 走看看