这个地方是以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;}