吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1029|回复: 3
收起左侧

[求助] 今天遇到一个类似文件夹和文件的问题,只保留包含文件的文件目录

[复制链接]
xiaohanshe 发表于 2023-3-20 16:52
问题描述:
有两张表

目录表:
catalogId 目录id
parentId 父id(根节点为 -1 )
catalogName 目录名
文件表:
fileId 文件id
catalogId 目录id(关联字段)
fileName 文件名

处理之前的样子:

处理后想得到的效果:
---文件夹
    ---文件夹5
        ---WTFSQL2
通过java查询数据库得到数据
搞了一整天没搞出来,跪求大佬贴出具体实现代码
贴上我的代码
public List<DmsLayerTree> layerTree(DmsLayer layer) {
    // 查询所有目录
    List<DmsCatalog> catalogs = catalogService.list();
    // 查询所有图层
    List<DmsLayer> layerList = lambdaQuery().list();
    // 查询根目录
    List<DmsLayerTree> layerTrees = catalogs
            .stream()
            .filter(catalog -> "-1".equals(catalog.getParentId()))
            .map(catalog -> {
                DmsLayerTree node = new DmsLayerTree();
                node.setCatalogId(catalog.getCatalogId());
                node.setParentId("-1");
                node.setCatalogName(catalog.getCatalogName());
                node.setCatalogCode(catalog.getCatalogCode());
                return node;
            })
            .collect(Collectors.toList());

    // 构建目录和图层树
    for (DmsLayerTree layerTree : layerTrees) {
        // 判断目录是否为空,如果为空则删除
        buildTree(catalogs, layerTrees, layerList, layerTree);
    }
    return layerTrees;
}

/**
* 构建目录树
* @Param allCatalog 所有目录
* @param parentNode 父级目录
* @param allLayer 所有图层
* @param dmsLayerTree 当前目录
*/
void buildTree(List<DmsCatalog> allCatalog,List<DmsLayerTree> parentNode,List<DmsLayer> allLayer,
               DmsLayerTree dmsLayerTree){
    // 图层id不为空,不做处理
    if (StrUtil.isNotBlank(dmsLayerTree.getLayerId())){
        return;
    }
    // 查询目录id相同的
    List<DmsLayerTree> list = allCatalog
            .stream()
            .filter(c -> c.getParentId().equals(dmsLayerTree.getCatalogId()))
            .map(c -> {
                // 如果
                DmsLayerTree node = new DmsLayerTree();
                node.setCatalogId(c.getCatalogId());
                node.setParentId(c.getParentId());
                node.setCatalogName(c.getCatalogName());
                node.setCatalogCode(c.getCatalogCode());
                return node;
            })
            .collect(Collectors.toList());

    // 根据目录id查询图层
    List<DmsLayerTree> layers = parentNode
            .stream()
            .filter(layer -> dmsLayerTree.getCatalogId().equals(layer.getCatalogId()))
            .map(layer -> {
                DmsLayerTree node = new DmsLayerTree();
                node.setCatalogId(layer.getCatalogId());
                node.setParentId(layer.getCatalogId());
                node.setLayerId(layer.getLayerId());
                node.setLayerAlias(layer.getLayerAlias());
                node.setLayerName(layer.getLayerName());
                return node;
            })
            .collect(Collectors.toList());

    // 添加图层数据
    list.addAll(layers);

    // 添加子节点
    dmsLayerTree.setChildrenNodes(list);

    // 继续遍历
    for (DmsLayerTree layerTree : list) {
        buildTree(allCatalog,parentNode,allLayer,layerTree);
    }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
MiaoAo + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nifeng522 发表于 2023-3-20 20:27
谢谢大神分享,受教了

免费评分

参与人数 1吾爱币 -5 收起 理由
苏紫方璇 -5 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

wuaipojieuser 发表于 2023-3-21 07:23
 楼主| xiaohanshe 发表于 2023-3-22 17:49
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表