java list 转树 tree 的三种写法 - jcroad的博客 - CSDN博客

List对象数组转为tree

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

pom里面加上:阿里的fastjson

<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --><dependency>  <groupId>net.sf.json-lib</groupId>  <artifactId>json-lib</artifactId>  <version>2.4</version></dependency>
import com.alibaba.fastjson.JSON; import java.util.ArrayList;import java.util.List; /** * <p></p> * * @package: com.tree * @class: TreeNode1 * @date: 2018/3/27 * @author: jcroad(caoyajing @ yunmel.com) * @since 1.0 */public class TreeNode {     private Integer id;    private Integer pid;    private String name;    private List<TreeNode> children;     TreeNode(Integer id, Integer pid, String name) {        this.id = id;        this.pid = pid;        this.name = name;    }     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;    }     public static void main(String[] args) {        List<TreeNode> list = new ArrayList<TreeNode>();        list.add(new TreeNode(1, 0, "1"));        list.add(new TreeNode(2, 0, "2"));        list.add(new TreeNode(3, 2, "3"));        list.add(new TreeNode(4, 3, "4"));        list.add(new TreeNode(5, 4, "5"));        list.add(new TreeNode(6, 5, "6"));         List<TreeNode> treeList = new ArrayList<TreeNode>();        List<TreeNode> treeList1 = new ArrayList<TreeNode>();        List<TreeNode> treeList2 = new ArrayList<TreeNode>();        List<TreeNode> treeList3 = new ArrayList<TreeNode>();        //方法一、         treeList = listGetStree(list);        treeList1 = listToTree(list);        treeList2 = toTree(list);         System.out.println(JSON.toJSONString(treeList));        System.out.println(JSON.toJSONString(treeList1));        System.out.println(JSON.toJSONString(treeList2));    }     private static List<TreeNode> listGetStree(List<TreeNode> list) {        List<TreeNode> treeList = new ArrayList<TreeNode>();        for (TreeNode tree : list) {            //找到根            if (tree.getPid() == 0) {                treeList.add(tree);            }            //找到子            for (TreeNode treeNode : list) {                if (treeNode.getPid() == tree.getId()) {                    if (tree.getChildren() == null) {                        tree.setChildren(new ArrayList<TreeNode>());                    }                    tree.getChildren().add(treeNode);                }            }        }        return treeList;    }     /**     * 方法二、     * @param list     * @return     */    public static List<TreeNode> listToTree(List<TreeNode> list) {        //用递归找子。        List<TreeNode> treeList = new ArrayList<TreeNode>();        for (TreeNode tree : list) {            if (tree.getPid() == 0) {                treeList.add(findChildren(tree, list));            }        }        return treeList;    }     private static TreeNode findChildren(TreeNode tree, List<TreeNode> list) {        for (TreeNode node : list) {            if (node.getPid() == tree.getId()) {                if (tree.getChildren() == null) {                    tree.setChildren(new ArrayList<TreeNode>());                }                tree.getChildren().add(findChildren(node, list));            }        }        return tree;    }     /**     *方法三     * @param list     * @return     */    private static List<TreeNode> toTree(List<TreeNode> list) {        List<TreeNode> treeList = new ArrayList<TreeNode>();        for (TreeNode tree : list) {            if(tree.getPid() == 0){                treeList.add(tree);            }        }        for (TreeNode tree : list) {            toTreeChildren(treeList,tree);        }        return treeList;    }     private static void toTreeChildren(List<TreeNode> treeList, TreeNode tree) {        for (TreeNode node : treeList) {            if(tree.getPid() == node.getId()){                if(node.getChildren() == null){                    node.setChildren(new ArrayList<TreeNode>());                }                node.getChildren().add(tree);            }            if(node.getChildren() != null){                toTreeChildren(node.getChildren(),tree);            }        }    }  }

Original url: Access
Created at: 2019-08-26 16:28:11
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论