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
  • 相关阅读:
    2014年互联网发展趋势如何
    服务器出现阶段性错误
    用互联网思想武装自己
    杭州互联网公司汇总
    互联网牛人网址大全
    ffmpeg开发指南
    Windows下FFmpeg快速入门
    FFmpeg介绍及参数详细说明
    windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载
    FFMPEG视音频编解码零基础学习方法 【荐】
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/14036822.html
Copyright © 2011-2022 走看看