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<>());
            }
          }
    
  • 相关阅读:
    c语言 inline函数
    ubuntu18.04 安装新版本openssl
    convert_mnist_data.cpp
    caffe 安装方法和记录
    【转】jdbc:oracle:thin:@localhost:1521:orcl与jdbc:oracle:thin:@//localhost:1521/orcl区别
    【原创】【HCIA】验证GaussDB 100系统函数to_nchar()是否能支持最大字节长度8000
    【原创】达梦数据库DM7备份与恢复
    【LINUX】操作系统时钟与硬件时钟设置
    【文档】ORACLE RAC 修改SCAN监听端口、VIP网络配置参考文档
    【转】11G R2 RAC: HOW TO IDENTIFY THE MASTER NODE IN RAC
  • 原文地址:https://www.cnblogs.com/wtao0730/p/14694203.html
Copyright © 2011-2022 走看看