package com.monkeylessey.utils; import com.monkeylessey.enums.general.MenuTypeEnum; import com.monkeylessey.sys.domain.base.AbsTree; import com.monkeylessey.sys.domain.vo.SysMenuVO; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 构建树结构工具 * * @author:xp * @date:2025/4/3 14:22 */ public class TreeUtil { /** * 构造树结构 * * @param nodes * @param * @return */ public static List buildTree(List nodes) { if (CollectionUtils.isEmpty(nodes)) { return new ArrayList<>(); } Map nodeMap = nodes.stream().collect(Collectors.toMap(AbsTree::getId, item -> item)); List roots = new ArrayList<>(); for (T treeNode : nodeMap.values()) { if ("0".equals(treeNode.getParentId())) { roots.add(treeNode); } else { T parent = nodeMap.get(treeNode.getParentId()); if (parent != null) { parent.getChildren().add(treeNode); } else { // 处理父节点不存在的情况,可能需要记录或抛出异常 } } } return roots; } /** * 构造菜单树结构 * * @param nodes * @param nodes * @return */ public static List buildMenuTree(List nodes) { if (CollectionUtils.isEmpty(nodes)) { return new ArrayList<>(); } Map nodeMap = nodes.stream().collect(Collectors.toMap(SysMenuVO::getId, item -> item)); List roots = new ArrayList<>(); for (SysMenuVO treeNode : nodeMap.values()) { if ("0".equals(treeNode.getParentId())) { roots.add(treeNode); } else { SysMenuVO parent = nodeMap.get(treeNode.getParentId()); if (parent != null && ! MenuTypeEnum.BUTTON.equals(treeNode.getMenuType())) { parent.getChildren().add(treeNode); } else { // 处理父节点不存在的情况,可能需要记录或抛出异常 } } } return roots; } }