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);
    }
}

nifeng522 发表于 2023-3-20 20:27

谢谢大神分享,受教了

wuaipojieuser 发表于 2023-3-21 07:23

可以用py

xiaohanshe 发表于 2023-3-22 17:49

wuaipojieuser 发表于 2023-3-21 07:23
可以用py

老哥帮帮忙,提供下完整的思路
页: [1]
查看完整版本: 今天遇到一个类似文件夹和文件的问题,只保留包含文件的文件目录