前言
提示:记录tree如果需要根据名称模糊搜索则需要在数据库中添加一个“祖级列表”
数据如下:
根据名称模糊查询解析祖级列表所有的id根据id(in)查询回来所有的集合直接调用一下方法生成树结构即可
1.示例
代码如下(示例):
/**
* 获取线及工作中心信息树
*
* @return tree树
*/
@Override
public List<ProductionLineWorkCenterTree> selectProductionLineWorkCenterListTree() {
//构建树
return buildTree(productionLineWorkCenterMapper.selectProductionLineWorkCenterListTree());
}
/**
* 构建树形结构
*
* @param dataList 数据列表
* @return 根节点
*/
public static List<ProductionLineWorkCenterTree> buildTree(List<ProductionLineWorkCenter> dataList) {
Map<Long, ProductionLineWorkCenterTree> nodeMap = new HashMap<>();
List<ProductionLineWorkCenterTree> roots = new ArrayList<>();
// 将节点放入map中
// 使用 BeanUtils 复制对象
for (ProductionLineWorkCenter data : dataList) {
ProductionLineWorkCenterTree ProductionLineWorkCenterTree = new ProductionLineWorkCenterTree();
try {
BeanUtils.copyProperties(data, ProductionLineWorkCenterTree);
} catch (Exception e) {
// 复制过程中可能会抛出异常
e.printStackTrace();
}
// 将复制后的对象添加到 nodeMap 中
nodeMap.put(ProductionLineWorkCenterTree.getId(), ProductionLineWorkCenterTree);
}
// 构建树并设置节点级别
for (ProductionLineWorkCenterTree node : nodeMap.values()) {
Long parentId = node.getParentId();
if (parentId != null && parentId != 0) {
ProductionLineWorkCenterTree parent = nodeMap.get(parentId);
if (parent != null) {
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(node);
}
} else {
roots.add(node);
}
}
// 递归设置节点级别
for (ProductionLineWorkCenterTree root : roots) {
setNodeLevel(root, 0);
}
return roots;
}
// 递归设置节点级别
private static void setNodeLevel(ProductionLineWorkCenterTree node, int level) {
node.setLevel(level);
if (node.getChildren() != null) {
for (ProductionLineWorkCenterTree child : node.getChildren()) {
setNodeLevel(child, level + 1);
}
}
}