• 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<>());
            }
          }
    
  • 相关阅读:
    Xcode 6 UITextField 键盘不弹出
    No Assistant Results
    iOS- 解决iOS10 App启动时放大铺满App Icon的问题
    iOS- 多线程中如何去保证线程安全
    iOS- 什么是GitHub?关于它的自我介绍「初识 GitHub」
    iOS- 利用AFNetworking3.0+(最新AFN)
    iOS- 利用AFNetworking3.0+(最新AFN)
    iOS- CALayer绘图,如何绘制渐变效果图
    iOS- Exception Type: 00000020:什么是看门狗机制
    iOS- Swift:指触即开,如何集成Touch ID指纹识别功能
  • 原文地址:https://www.cnblogs.com/wtao0730/p/14694203.html
Copyright © 2020-2023  润新知