树形结构的工具类TreeUtil
这个地方是以null为根节点,相关以null或者0自己在TreeUtil中加代码,就行
基础类
package com.jm.common.entity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:JianWu
* @Date: 2025/3/26 9:02
*/
@Data
public class BaseTree <T> {
private Integer id;
private Integer parentId;
private List<T> children = new ArrayList<>();
}
工具类
package com.jm.common.util;
import com.jm.common.entity.BaseTree;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author:JianWu
* @Date: 2025/3/25 17:56
*/
public class TreeUtils {
/**
* 将扁平化的 List 转换为树形结构
*
* @param list 扁平化的节点列表
* @return 树形结构的根节点列表
*/
public static <T extends BaseTree> List<T> buildTree(List<T> list) {
// 用于存储所有节点的映射表
Map<Integer, T> nodeMap = new HashMap<>();
// 用于存储根节点的列表
List<T> roots = new ArrayList<>();
// 将所有节点放入映射表
for (T node : list) {
nodeMap.put(node.getId(), node);
}
// 构建树形结构
for (T node : list) {
Integer parentId = node.getParentId();
if (parentId == null) {
// 如果 parentId 为 null,说明是根节点
roots.add(node);
} else {
// 否则,找到父节点并添加到其子节点列表
T parent = nodeMap.get(parentId);
if (parent != null) {
parent.getChildren().add(node);
}
}
}
return roots;
}
}
调用类
public List<DictDataTreeResp> getDictDataTree() {
List<DictDataTreeResp> allDictDataList = baseMapper.getTypeDataList();
List<DictDataTreeResp> dictDataTreeResps = TreeUtils.buildTree(allDictDataList);
return dictDataTreeResps;
}