package com.mindskip.xzs.utility; import com.mindskip.xzs.vo.TreeNode; import org.apache.commons.lang3.ObjectUtils; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 树形结构工具类,如:菜单、部门等 * * @author gonghl */ public class TreeUtils { /** * 根据pid,构建树节点 */ public static List build(List treeNodes, Integer pid) { //pid不能为空 if (ObjectUtils.isEmpty(pid)) { return null; } List treeList = new ArrayList<>(); for (T treeNode : treeNodes) { if (pid.equals(treeNode.getParentId())) { treeList.add(findChildren(treeNodes, treeNode)); } } return treeList; } /** * 查找子节点 */ private static T findChildren(List treeNodes, T rootNode) { for (T treeNode : treeNodes) { if (rootNode.getId().equals(treeNode.getParentId())) { rootNode.getChildren().add(findChildren(treeNodes, treeNode)); } } return rootNode; } /** * 构建树节点 */ public static List build(List treeNodes) { List result = new ArrayList<>(); //list转map Map nodeMap = new LinkedHashMap<>(treeNodes.size()); for (T treeNode : treeNodes) { nodeMap.put(treeNode.getId(), treeNode); } for (T node : nodeMap.values()) { T parent = nodeMap.get(node.getParentId()); if (parent != null && !(node.getId().equals(parent.getId()))) { parent.getChildren().add(node); continue; } result.add(node); } return result; } }