| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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<TreeNode> nodes = new ArrayList<TreeNode>();
-
- public Tree(List<TreeNode> nodes) {
- super();
- this.nodes = nodes;
- }
-
- /**
- * 构建树形结构
- *
- * @return
- */
- public List<TreeNode> buildTree() {
- List<TreeNode> treeNodes = new ArrayList<TreeNode>();
- List<TreeNode> rootNodes = getRootNodes();
- for (TreeNode rootNode : rootNodes) {
- buildChildNodes(rootNode);
- treeNodes.add(rootNode);
- }
- return treeNodes;
- }
-
- /**
- * 递归子节点
- *
- * @param node
- */
- public void buildChildNodes(TreeNode node) {
- List<TreeNode> children = getChildNodes(node);
- if (!children.isEmpty()) {
- for (TreeNode child : children) {
- buildChildNodes(child);
- }
- node.setChildren(children);
- }
- }
-
- /**
- * 获取父节点下所有的子节点
- *
- * @param nodes
- * @param pnode
- * @return
- */
- public List<TreeNode> getChildNodes(TreeNode pnode) {
- List<TreeNode> childNodes = new ArrayList<TreeNode>();
- 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<TreeNode> getRootNodes() {
- List<TreeNode> rootNodes = new ArrayList<TreeNode>();
- for (TreeNode n : nodes) {
- if (rootNode(n)) {
- rootNodes.add(n);
- }
- }
- return rootNodes;
- }
- }
|