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 <T>
|
* @return
|
*/
|
public static <T extends AbsTree> List<T> buildTree(List<T> nodes) {
|
if (CollectionUtils.isEmpty(nodes)) {
|
return new ArrayList<>();
|
}
|
Map<String, T> nodeMap = nodes.stream().collect(Collectors.toMap(AbsTree::getId, item -> item));
|
List<T> 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<SysMenuVO> buildMenuTree(List<SysMenuVO> nodes) {
|
if (CollectionUtils.isEmpty(nodes)) {
|
return new ArrayList<>();
|
}
|
Map<String, SysMenuVO> nodeMap = nodes.stream().collect(Collectors.toMap(SysMenuVO::getId, item -> item));
|
List<SysMenuVO> 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;
|
}
|
|
}
|