TreeUtil.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.yaozhitech.spring5.common.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.yaozhitech.spring5.common.vo.TreeNode;
  5. /**
  6. * Created by Ace on 2017/6/12.
  7. */
  8. public class TreeUtil{
  9. /**
  10. * 两层循环实现建树
  11. *
  12. * @param treeNodes 传入的树节点列表
  13. * @return
  14. */
  15. public static <T extends TreeNode> List<T> bulid(List<T> treeNodes,Object root) {
  16. List<T> trees = new ArrayList<T>();
  17. for (T treeNode : treeNodes) {
  18. if (root.equals(treeNode.getParentId())) {
  19. trees.add(treeNode);
  20. }
  21. for (T it : treeNodes) {
  22. if (it.getParentId() == treeNode.getId()) {
  23. if (treeNode.getChildren() == null) {
  24. treeNode.setChildren(new ArrayList<TreeNode>());
  25. }
  26. treeNode.add(it);
  27. }
  28. }
  29. }
  30. return trees;
  31. }
  32. /**
  33. * 使用递归方法建树
  34. *
  35. * @param treeNodes
  36. * @return
  37. */
  38. public static <T extends TreeNode> List<T> buildByRecursive(List<T> treeNodes,Object root) {
  39. List<T> trees = new ArrayList<T>();
  40. for (T treeNode : treeNodes) {
  41. if (root.equals(treeNode.getParentId())) {
  42. trees.add(findChildren(treeNode, treeNodes));
  43. }
  44. }
  45. return trees;
  46. }
  47. /**
  48. * 递归查找子节点
  49. *
  50. * @param treeNodes
  51. * @return
  52. */
  53. public static <T extends TreeNode> T findChildren(T treeNode, List<T> treeNodes) {
  54. for (T it : treeNodes) {
  55. if (treeNode.getId() == it.getParentId()) {
  56. if (treeNode.getChildren() == null) {
  57. treeNode.setChildren(new ArrayList<TreeNode>());
  58. }
  59. treeNode.add(findChildren(it, treeNodes));
  60. }
  61. }
  62. return treeNode;
  63. }
  64. }