编程开发如何实现List转为Tree的。
package com.xicheng.test; import java.util.List; /** * 2018年3月26日上午7:32:37 * 树节点实体类 */ public class TreeNode { private String id; private String parentId; private String name; private Listchildren; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } @Override public String toString() { return "TreeNode [id=" + id + ", parentId=" + parentId + ", name=" + name + ", children=" + children + "]"; } public TreeNode() { } public TreeNode(String id, String name, String parentId) { this.id = id; this.parentId = parentId; this.name = name; } }
package com.xicheng.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class List2Tree { public static void main(String[] args) { TreeNode t1 = new TreeNode("1","p1","0"); TreeNode t2 = new TreeNode("2","p2","0"); TreeNode t3 = new TreeNode("3","s11","1"); TreeNode t4 = new TreeNode("4","s12","1"); TreeNode t5 = new TreeNode("5","s21","2"); TreeNode t6 = new TreeNode("6","s22","2"); TreeNode t7 = new TreeNode("7","s23","2"); ListtreeList = new ArrayList<>(); Collections.addAll(treeList, t1,t2,t3,t4,t5,t6,t7); System.out.println(toTree01(treeList)); System.out.println(toTree02(treeList)); } /** * 方式一:使用两层循环实现 * @param list * @return */ public static List toTree01(List treeList) { List retList = new ArrayList<>(); for (TreeNode parent : treeList) { if ("0".equals(parent.getParentId())) { retList.add(parent); } for (TreeNode child : treeList) { if (child.getParentId() == parent.getId()) { if (parent.getChildren() == null) { parent.setChildren(new ArrayList<>()); } parent.getChildren().add(child); } } } return retList; } /** * 方式二:使用递归实现 * @param treeList * @return */ public static List toTree02(List treeList) { List retList = new ArrayList<>(); for (TreeNode parent : treeList) { if ("0".equals(parent.getParentId())) { retList.add(findChildren(parent, treeList)); } } return retList; } private static TreeNode findChildren(TreeNode parent, List treeList) { for (TreeNode child : treeList) { if (parent.getId().equals(child.getParentId())) { if (parent.getChildren() == null) { parent.setChildren(new ArrayList<>()); } parent.getChildren().add(findChildren(child, treeList)); } } return parent; } }