import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; public class TreeNode { private Integer id; private Integer pid; private String name; private List<TreeNode> children; public TreeNode() { } public TreeNode(Integer id, Integer pid, String name) { this.id = id; this.pid = pid; this.name = name; } public TreeNode(Integer id, Integer pid, String name, List<TreeNode> children) { this.id = id; this.pid = pid; this.name = name; this.children = children; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getPid() { return pid; } public void setPid(Integer 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; } // 定义转换方法1 public static List<TreeNode> listGetTree(List<TreeNode> list){ List<TreeNode> treelist = new ArrayList<>(); for(TreeNode treeNode:list){ // 找到各个父根,直接插入到treeList中,作为初始节点s if(treeNode.getPid() == 0){ treelist.add(treeNode); } // 找到子 for(TreeNode treeNode1:list){ if(treeNode1.getPid() == treeNode.getId()){ if(treeNode.getChildren() ==null){ treeNode.setChildren(new ArrayList<TreeNode>()); } treeNode.getChildren().add(treeNode1); } } } return treelist; } // 方法二,先找最父级节点,然后递归找子 public static List<TreeNode> listToTreeByRecursion(List<TreeNode> list){ // 先找到最初的父节点 List<TreeNode> treeNodeList = new ArrayList<>(); for(TreeNode treeNode: list){ if(treeNode.getPid() == 0){ treeNodeList.add(findChildren(treeNode, list)); } } return treeNodeList; } public static TreeNode findChildren(TreeNode treeNode, List<TreeNode> list){ // 根据父节点去递归找子 for(TreeNode treeNode1: list){ if(treeNode1.getId() == treeNode.getPid()){ if(treeNode.getChildren()==null){ treeNode.setChildren(new ArrayList<TreeNode>()); treeNode.getChildren().add(findChildren(treeNode1, list)); } } } return treeNode; } public static void main(String[] args) { List<TreeNode> list = new ArrayList<TreeNode>(); list.add(new TreeNode(1,0,"1")); list.add(new TreeNode(2,1,"2")); list.add(new TreeNode(3,2,"3")); list.add(new TreeNode(11,0,"11")); list.add(new TreeNode(21,11,"21")); list.add(new TreeNode(31,21,"31")); // 方法一 List<TreeNode> treelist = new ArrayList<TreeNode>(); treelist = listGetTree(list); // 方式二 System.out.println("方式一:" + JSON.toJSON(treelist)); List<TreeNode> treelist1 = new ArrayList<TreeNode>(); treelist1 = listToTreeByRecursion(list); System.out.println("方式二:" + JSON.toJSON(treelist1)); } }