• 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<>());
            }
          }
    
  • 相关阅读:
    设计模式--4建造者模式
    java中的方法重载与重写以及方法修饰符
    设计模式--3.模板方法模式
    设计模式--2.工厂方法模式
    设计模式--1.单例模式
    问题--时景某些用户不能发表评论解决方案
    EXCEL:从一组数据中查找我想要的某个数据是否存在
    Git版本控制--05--可以吃后悔药之版本回退
    Git版本控制--04--文件修改后怎么提交
    Git版本控制--03--怎么向Git仓库中添加文件
  • 原文地址:https://www.cnblogs.com/wtao0730/p/14694203.html
Copyright © 2020-2023  润新知