這個地方是以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;}