java list 转树 tree 的三种写法

java list 转树 tree 的三种写法

List对象数组转为tree

代码是自己写的,今天学习来的。下一步,写成工具类。

pom里面加上:阿里的fastjson
 
 
  1. <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->

  2. <dependency>

  3. <groupId>net.sf.json-lib</groupId>

  4. <artifactId>json-lib</artifactId>

  5. <version>2.4</version>

  6. </dependency>

 
 
  1. import com.alibaba.fastjson.JSON;

  2.  
  3. import java.util.ArrayList;

  4. import java.util.List;

  5.  
  6. /**

  7. * <p></p>

  8. *

  9. * @package: com.tree

  10. * @class: TreeNode1

  11. * @date: 2018/3/27

  12. * @author: jcroad(caoyajing @ yunmel.com)

  13. * @since 1.0

  14. */

  15. public class TreeNode {

  16.  
  17. private Integer id;

  18. private Integer pid;

  19. private String name;

  20. private List<TreeNode> children;

  21.  
  22. TreeNode(Integer id, Integer pid, String name) {

  23. this.id = id;

  24. this.pid = pid;

  25. this.name = name;

  26. }

  27.  
  28. public Integer getId() {

  29. return id;

  30. }

  31.  
  32. public void setId(Integer id) {

  33. this.id = id;

  34. }

  35.  
  36. public Integer getPid() {

  37. return pid;

  38. }

  39.  
  40. public void setPid(Integer pid) {

  41. this.pid = pid;

  42. }

  43.  
  44. public String getName() {

  45. return name;

  46. }

  47.  
  48. public void setName(String name) {

  49. this.name = name;

  50. }

  51.  
  52. public List<TreeNode> getChildren() {

  53. return children;

  54. }

  55.  
  56. public void setChildren(List<TreeNode> children) {

  57. this.children = children;

  58. }

  59.  
  60. public static void main(String[] args) {

  61. List<TreeNode> list = new ArrayList<TreeNode>();

  62. list.add(new TreeNode(1, 0, "1"));

  63. list.add(new TreeNode(2, 0, "2"));

  64. list.add(new TreeNode(3, 2, "3"));

  65. list.add(new TreeNode(4, 3, "4"));

  66. list.add(new TreeNode(5, 4, "5"));

  67. list.add(new TreeNode(6, 5, "6"));

  68.  
  69. List<TreeNode> treeList = new ArrayList<TreeNode>();

  70. List<TreeNode> treeList1 = new ArrayList<TreeNode>();

  71. List<TreeNode> treeList2 = new ArrayList<TreeNode>();

  72. List<TreeNode> treeList3 = new ArrayList<TreeNode>();

  73. //方法一、

  74. treeList = listGetStree(list);

  75. treeList1 = listToTree(list);

  76. treeList2 = toTree(list);

  77.  
  78. System.out.println(JSON.toJSONString(treeList));

  79. System.out.println(JSON.toJSONString(treeList1));

  80. System.out.println(JSON.toJSONString(treeList2));

  81. }

  82.  
  83. private static List<TreeNode> listGetStree(List<TreeNode> list) {

  84. List<TreeNode> treeList = new ArrayList<TreeNode>();

  85. for (TreeNode tree : list) {

  86. //找到根

  87. if (tree.getPid() == 0) {

  88. treeList.add(tree);

  89. }

  90. //找到子

  91. for (TreeNode treeNode : list) {

  92. if (treeNode.getPid() == tree.getId()) {

  93. if (tree.getChildren() == null) {

  94. tree.setChildren(new ArrayList<TreeNode>());

  95. }

  96. tree.getChildren().add(treeNode);

  97. }

  98. }

  99. }

  100. return treeList;

  101. }

  102.  
  103. /**

  104. * 方法二、

  105. * @param list

  106. * @return

  107. */

  108. public static List<TreeNode> listToTree(List<TreeNode> list) {

  109. //用递归找子。

  110. List<TreeNode> treeList = new ArrayList<TreeNode>();

  111. for (TreeNode tree : list) {

  112. if (tree.getPid() == 0) {

  113. treeList.add(findChildren(tree, list));

  114. }

  115. }

  116. return treeList;

  117. }

  118.  
  119. private static TreeNode findChildren(TreeNode tree, List<TreeNode> list) {

  120. for (TreeNode node : list) {

  121. if (node.getPid() == tree.getId()) {

  122. if (tree.getChildren() == null) {

  123. tree.setChildren(new ArrayList<TreeNode>());

  124. }

  125. tree.getChildren().add(findChildren(node, list));

  126. }

  127. }

  128. return tree;

  129. }

  130.  
  131. /**

  132. *方法三

  133. * @param list

  134. * @return

  135. */

  136. private static List<TreeNode> toTree(List<TreeNode> list) {

  137. List<TreeNode> treeList = new ArrayList<TreeNode>();

  138. for (TreeNode tree : list) {

  139. if(tree.getPid() == 0){

  140. treeList.add(tree);

  141. }

  142. }

  143. for (TreeNode tree : list) {

  144. toTreeChildren(treeList,tree);

  145. }

  146. return treeList;

  147. }

  148.  
  149. private static void toTreeChildren(List<TreeNode> treeList, TreeNode tree) {

  150. for (TreeNode node : treeList) {

  151. if(tree.getPid() == node.getId()){

  152. if(node.getChildren() == null){

  153. node.setChildren(new ArrayList<TreeNode>());

  154. }

  155. node.getChildren().add(tree);

  156. }

  157. if(node.getChildren() != null){

  158. toTreeChildren(node.getChildren(),tree);

  159. }

  160. }

  161. }

  162.  
  163.  
  164. }

猜你喜欢

转载自blog.csdn.net/qq_29726869/article/details/81316302
今日推荐