今天遇到一个类似文件夹和文件的问题,只保留包含文件的文件目录
问题描述:有两张表
目录表:
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);
}
} 谢谢大神分享,受教了 可以用py wuaipojieuser 发表于 2023-3-21 07:23
可以用py
老哥帮帮忙,提供下完整的思路
页:
[1]