package com.persagy.old.common; import java.util.ArrayList; import java.util.List; /** * * Description: 递归封装树形结构 * Company: Persagy * @author yuecaipu * @version 1.0 * @since: 2018年11月19日: 上午11:17:34 * Update By yuecaipu 2018年11月19日: 上午11:17:34 */ public class Tree { List nodes = new ArrayList(); public Tree(List nodes) { super(); this.nodes = nodes; } /** * 构建树形结构 * * @return */ public List buildTree() { List treeNodes = new ArrayList(); List rootNodes = getRootNodes(); for (TreeNode rootNode : rootNodes) { buildChildNodes(rootNode); treeNodes.add(rootNode); } return treeNodes; } /** * 递归子节点 * * @param node */ public void buildChildNodes(TreeNode node) { List children = getChildNodes(node); if (!children.isEmpty()) { for (TreeNode child : children) { buildChildNodes(child); } node.setChildren(children); } } /** * 获取父节点下所有的子节点 * * @param nodes * @param pnode * @return */ public List getChildNodes(TreeNode pnode) { List childNodes = new ArrayList(); for (TreeNode n : nodes) { if (pnode.getKey().equals(n.getParentId())) { childNodes.add(n); } } return childNodes; } /** * 判断是否为根节点 * * @param nodes * @param inNode * @return */ public boolean rootNode(TreeNode node) { boolean isRootNode = true; if (node.getParentId()==null) { return isRootNode; } for (TreeNode n : nodes) { if (node.getParentId().equals(n.getKey())) { isRootNode = false; break; } } return isRootNode; } /** * 获取集合中所有的根节点 * * @param nodes * @return */ public List getRootNodes() { List rootNodes = new ArrayList(); for (TreeNode n : nodes) { if (rootNode(n)) { rootNodes.add(n); } } return rootNodes; } }