List转换成Tree

来源:互联网 发布:智慧足迹数据 编辑:程序博客网 时间:2024/06/06 00:39


package demo01;import java.util.List;/** * 树节点 *  * @author  * */public class TreeNode {private String id;private String pid;private String name;private List<TreeNode> children;public TreeNode(String id, String name, String pid) {this.id = id;this.name = name;this.pid = pid;}public TreeNode(String id, String name, TreeNode parent) {this.id = id;this.name = name;this.pid = parent.getId();}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPid() {return pid;}public void setPid(String pid) {this.pid = pid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<TreeNode> getChildren() {return children;}public void setChildren(List<TreeNode> children) {this.children = children;}@Overridepublic String toString() {return "TreeNode [id=" + id + ", pid=" + pid + ", name=" + name + ", children=" + children + "]";}}


package demo01;import java.util.ArrayList;import java.util.List;public class TreeBuilder {/** * 构造树形结构(双重for循环) * @param treeNodes * @return */public static List<TreeNode> build(List<TreeNode> treeNodes) {List<TreeNode> treeNodeList = new ArrayList<TreeNode>();for (TreeNode treeNode : treeNodes) {if ("NULL".equals(treeNode.getPid())) {treeNodeList.add(treeNode);}for (TreeNode it : treeNodes) {if (it.getPid() == treeNode.getId()) {if (treeNode.getChildren() == null) {treeNode.setChildren(new ArrayList<TreeNode>());}treeNode.getChildren().add(it);}}}return treeNodeList;}/** * 构造树形结构(递归) * @param treeNodes * @return */public static List<TreeNode> build2(List<TreeNode> treeNodes) {List<TreeNode> trees = new ArrayList<TreeNode>();for (TreeNode treeNode : treeNodes) {if ("NULL".equals(treeNode.getPid())) {trees.add(findChildren(treeNode, treeNodes));}}return trees;}public static TreeNode findChildren(TreeNode treeNode, List<TreeNode> treeNodes) {for (TreeNode it : treeNodes) {if (treeNode.getId().equals(it.getPid())) {if (treeNode.getChildren() == null) {treeNode.setChildren(new ArrayList<TreeNode>());}treeNode.getChildren().add(findChildren(it, treeNodes));}}return treeNode;}}

package demo01;import java.util.ArrayList;import java.util.List;public class Start {public static void main(String[] args) {TreeNode treeNode_1 = new TreeNode("1","辽宁","NULL");TreeNode treeNode_1_1 = new TreeNode("2","沈阳",treeNode_1);TreeNode treeNode_1_2 = new TreeNode("3","大连",treeNode_1);List<TreeNode> list = new ArrayList<TreeNode>();  list.add(treeNode_1);list.add(treeNode_1_1);list.add(treeNode_1_2);List<TreeNode> trees_1 = TreeBuilder.build(list);System.out.println(trees_1);//List<TreeNode> trees_2 = TreeBuilder.build2(list);//System.out.println(trees_2);}}


输出结果:[TreeNode [id=1, pid=NULL, name=辽宁, children=[TreeNode [id=2, pid=1, name=沈阳, children=null], TreeNode [id=3, pid=1, name=大连, children=null]]]]