Tree.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package com.persagy.old.common;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. *
  6. * Description: 递归封装树形结构
  7. * Company: Persagy
  8. * @author yuecaipu
  9. * @version 1.0
  10. * @since: 2018年11月19日: 上午11:17:34
  11. * Update By yuecaipu 2018年11月19日: 上午11:17:34
  12. */
  13. public class Tree {
  14. List<TreeNode> nodes = new ArrayList<TreeNode>();
  15. public Tree(List<TreeNode> nodes) {
  16. super();
  17. this.nodes = nodes;
  18. }
  19. /**
  20. * 构建树形结构
  21. *
  22. * @return
  23. */
  24. public List<TreeNode> buildTree() {
  25. List<TreeNode> treeNodes = new ArrayList<TreeNode>();
  26. List<TreeNode> rootNodes = getRootNodes();
  27. for (TreeNode rootNode : rootNodes) {
  28. buildChildNodes(rootNode);
  29. treeNodes.add(rootNode);
  30. }
  31. return treeNodes;
  32. }
  33. /**
  34. * 递归子节点
  35. *
  36. * @param node
  37. */
  38. public void buildChildNodes(TreeNode node) {
  39. List<TreeNode> children = getChildNodes(node);
  40. if (!children.isEmpty()) {
  41. for (TreeNode child : children) {
  42. buildChildNodes(child);
  43. }
  44. node.setChildren(children);
  45. }
  46. }
  47. /**
  48. * 获取父节点下所有的子节点
  49. *
  50. * @param nodes
  51. * @param pnode
  52. * @return
  53. */
  54. public List<TreeNode> getChildNodes(TreeNode pnode) {
  55. List<TreeNode> childNodes = new ArrayList<TreeNode>();
  56. for (TreeNode n : nodes) {
  57. if (pnode.getKey().equals(n.getParentId())) {
  58. childNodes.add(n);
  59. }
  60. }
  61. return childNodes;
  62. }
  63. /**
  64. * 判断是否为根节点
  65. *
  66. * @param nodes
  67. * @param inNode
  68. * @return
  69. */
  70. public boolean rootNode(TreeNode node) {
  71. boolean isRootNode = true;
  72. if (node.getParentId()==null) {
  73. return isRootNode;
  74. }
  75. for (TreeNode n : nodes) {
  76. if (node.getParentId().equals(n.getKey())) {
  77. isRootNode = false;
  78. break;
  79. }
  80. }
  81. return isRootNode;
  82. }
  83. /**
  84. * 获取集合中所有的根节点
  85. *
  86. * @param nodes
  87. * @return
  88. */
  89. public List<TreeNode> getRootNodes() {
  90. List<TreeNode> rootNodes = new ArrayList<TreeNode>();
  91. for (TreeNode n : nodes) {
  92. if (rootNode(n)) {
  93. rootNodes.add(n);
  94. }
  95. }
  96. return rootNodes;
  97. }
  98. }