zoukankan      html  css  js  c++  java
  • Java实现 List转JSONTree形式,两种常用方式

    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));
    
        }
    
    }
    欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
  • 相关阅读:
    Spring AOP中文教程《转》
    VBScript 转义字符
    Spring工作原理
    Struts+Hibernate+Spring工作原理及使用理由
    SQL Server中,varchar和nvarchar如何选择?<转>
    TSQL 游标使用
    oracle 与sql server临时表 比较《转》
    Oracle查询语法大全<转>
    B/S 模式 套打 的一种实现方式<转>
    基于Web的套打方案集粹<转>
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/14036822.html
Copyright © 2011-2022 走看看