首页 > 编程语言 >java 递归拼接树形结构代码

java 递归拼接树形结构代码

时间:2023-05-20 18:12:38浏览次数:48  
标签:java DataItem Data1 树形 add 拼接 child new data

1、json数据(目标)

[{
          label: '一级 1',
          children: [{
            label: '二级 1-1',
            children: [{
              label: '三级 1-1-1'
            }]
          }]
        }, {
          label: '一级 2',
          children: [{
            label: '二级 2-1',
            children: [{
              label: '三级 2-1-1'
            }]
          }, {
            label: '二级 2-2',
            children: [{
              label: '三级 2-2-1'
            }]
          }]
        }, {
          label: '一级 3',
          children: [{
            label: '二级 3-1',
            children: [{
              label: '三级 3-1-1'
            }]
          }, {
            label: '二级 3-2',
            children: [{
              label: '三级 3-2-1'
            }]
          }]
        }]
View Code

2、基础类型

package test;

import java.util.List;

/**
 * chao
 */
public class DataItem {
    private String label;

    private List<DataItem> children;

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public List<DataItem> getChildren() {
        return children;
    }

    public void setChildren(List<DataItem> children) {
        this.children = children;
    }
}
View Code
package test;

/**
 * 代表数据库里的表
 */
public class DataModel {
    private  Integer id;
    private  String label;
    private  Integer pId;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public Integer getPId() {
        return pId;
    }

    public void setPId(Integer pId) {
        this.pId = pId;
    }

    public DataModel(Integer id, String label, Integer pId) {
        this.id = id;
        this.label = label;
        this.pId = pId;
    }
}
View Code

3、手动拼接树形结构

// 手动拼接json格式
        {
            List<DataItem> list = new ArrayList<DataItem>();
            //第一条数据
            {
                DataItem data = new DataItem();
                data.setLabel("一级 1");
                List<DataItem> data_child = new ArrayList<DataItem>();
                data.setChildren(data_child);

                DataItem data_child_Data1 = new DataItem();
                data_child_Data1.setLabel("二级 1-1");
                List<DataItem> data_child_Data1_child = new ArrayList<DataItem>();
                data_child_Data1.setChildren(data_child_Data1_child);

                data_child.add(data_child_Data1);

                DataItem child1Data1_child_Data1 = new DataItem();
                child1Data1_child_Data1.setLabel("三级 1-1-1");
                data_child_Data1_child.add(child1Data1_child_Data1);

                list.add(data);
            }

            //第二条数据
            {
                DataItem data = new DataItem();
                data.setLabel("一级 2");
                List<DataItem> data_child = new ArrayList<DataItem>();
                data.setChildren(data_child);
                //第一条
                {
                    DataItem data_child_Data1 = new DataItem();
                    data_child_Data1.setLabel("二级 2-1");
                    List<DataItem> data_child_Data1_child = new ArrayList<DataItem>();
                    data_child_Data1.setChildren(data_child_Data1_child);

                    data_child.add(data_child_Data1);

                    DataItem child1Data1_child_Data1 = new DataItem();
                    child1Data1_child_Data1.setLabel("三级 2-1-1");
                    data_child_Data1_child.add(child1Data1_child_Data1);
                }

                //第二条
                {
                    DataItem data_child_Data1 = new DataItem();
                    data_child_Data1.setLabel("二级 2-2");
                    List<DataItem> data_child_Data1_child = new ArrayList<DataItem>();
                    data_child_Data1.setChildren(data_child_Data1_child);

                    data_child.add(data_child_Data1);

                    DataItem child1Data1_child_Data1 = new DataItem();
                    child1Data1_child_Data1.setLabel("三级 2-2-1");
                    data_child_Data1_child.add(child1Data1_child_Data1);
                }

                list.add(data);
            }


            //第三条数据
            {
                DataItem data = new DataItem();
                data.setLabel("一级 3");
                List<DataItem> data_child = new ArrayList<DataItem>();
                data.setChildren(data_child);
                //第一条
                {
                    DataItem data_child_Data1 = new DataItem();
                    data_child_Data1.setLabel("二级 3-1");
                    List<DataItem> data_child_Data1_child = new ArrayList<DataItem>();
                    data_child_Data1.setChildren(data_child_Data1_child);

                    data_child.add(data_child_Data1);

                    DataItem child1Data1_child_Data1 = new DataItem();
                    child1Data1_child_Data1.setLabel("三级 3-1-1");
                    data_child_Data1_child.add(child1Data1_child_Data1);
                }

                //第二条
                {
                    DataItem data_child_Data1 = new DataItem();
                    data_child_Data1.setLabel("二级 3-2");
                    List<DataItem> data_child_Data1_child = new ArrayList<DataItem>();
                    data_child_Data1.setChildren(data_child_Data1_child);

                    data_child.add(data_child_Data1);

                    DataItem child1Data1_child_Data1 = new DataItem();
                    child1Data1_child_Data1.setLabel("三级 3-2-1");
                    data_child_Data1_child.add(child1Data1_child_Data1);
                }

                list.add(data);
            }

            System.out.println("----------手动拼接----------");
            System.out.println(JSON.toJSONString(list));
View Code

4、递归拼接

//原始数据
            List<DataModel> dataList = new ArrayList();
            {
                dataList.add(new DataModel(1, "一级 1", 0));
                dataList.add(new DataModel(2, "二级 1-1", 1));
                dataList.add(new DataModel(3, "三级 1-1-1", 2));

                dataList.add(new DataModel(4, "一级 2", 0));
                dataList.add(new DataModel(5, "二级 2-1", 4));
                dataList.add(new DataModel(6, "三级 2-1-1", 5));
                dataList.add(new DataModel(7, "二级 2-2", 4));
                dataList.add(new DataModel(8, "三级 2-2-1", 7));

                dataList.add(new DataModel(9, "一级 3", 0));
                dataList.add(new DataModel(10, "二级 3-1", 9));
                dataList.add(new DataModel(11, "三级 3-1-1", 10));
                dataList.add(new DataModel(12, "二级 3-2", 9));
                dataList.add(new DataModel(13, "三级 3-2-1", 12));
            }

            //树结构结果
            List<DataItem> treeList = new ArrayList<DataItem>();
            treeList = GetTreeData(dataList, 0);

            System.out.println("----------递归拼接----------");
            System.out.println(JSON.toJSONString(treeList));
 /**
     * 递归
     *
     * @param sourceDataList
     * @param pId
     * @return
     */
    private static List<DataItem> GetTreeData(List<DataModel> sourceDataList, Integer pId) {
        List<DataItem> returnList = new ArrayList<DataItem>();
        for (Integer i = 0; i < sourceDataList.size(); i++) {
            DataModel itemData = sourceDataList.get(i);
            if (itemData.getPId().equals(pId)) {
                DataItem item = new DataItem();
                item.setLabel(itemData.getLabel());
                List children = GetTreeData(sourceDataList, itemData.getId());
                if (children.size() > 0)
                    item.setChildren(children);
                returnList.add(item);
            }
        }
        return returnList;
    }

 

标签:java,DataItem,Data1,树形,add,拼接,child,new,data
From: https://www.cnblogs.com/mulans/p/17417572.html

相关文章

  • 用Java实现计算器的功能
    练习一1.设计一个类模拟一个计算器达到什么需求?加减乘除需要设计一个方法一个计算方法控制台输出首先请输入第一个数例如数字1 请输入符号 例如+ 请输入第二个数 例如2第二次数字3 请输入符号 - 请输入第二个数 2结果1程序解析:使用Scanner进......
  • Java云his住院业务模块常见问题及解决方案
    一:住院业务1.患者办理住院时分配了错误的病区怎么办? 操作员误操作将患者分配了错误的病区科室分为以下两种情况:(1)、患者刚刚入院,未分配床位、主治医师与管床护士:这种情况比较好处理,只需对应病区的医生或者护士在分配入住科室子模块待分配子页面找到错误病区的病人,点击转科按钮,......
  • Java 从 ZipEntry 对象中读取指定文件
    /***从zip文件中,读取指定的压缩内容*@paramzipFilezip压缩文件*@paramfileName需要读取的文件名*@paramoutTxtFile输出文件*/privatestaticvoidreadFileFromZipEntry(FilezipFile,StringfileName,FileoutTxtFile){......
  • springboot的xml和java对象转换
    packagecom.zygh.tscmp.pojo;importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;importcom.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;importcom.faster......
  • Java接口自动化-excel中参数化随机数-反射
    1.最近在想到一个提高档次的一个参数化随机数的方法:反射场景:一般真实的测试数据不会写在excel表中,都是以${}的格式表示,对应的测试数据是写在了项目的properties或者yaml文件中。2.例如:注册,登录场景,随机生成手机号(1).excel设计随机参数:上图随机参数手机号是${generatePhone......
  • java8
    1.编写一个方法,实现冒泡排序(由小到大),并调用该方法packagetest;publicclassccc1{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintx[]={1,3,5,6,7,2};paixu(x);for(inti=0;i<x.length;i++){System.out.println(x[i]);}}publicstaticvoi......
  • 数据表单JavaScript代码
    functionload_suoshugaoxiao(){ common_post.postPortal({ "ac":"get_data_by_sql_back_data_table_from_portal_with_table_id", "sql":"selectmingchenfromtable_idwheregongjiandanweileixing='高校'&q......
  • jre jdk更改目录后Java无法运行问题解决方案
    问题:在将Java文件(包含jdkjre)由C盘直接剪贴到D盘后,所有Java程序无法运行,且其Java图标不再显示。解决方案:首先更改环境变量。当我们单纯地将Java文件更改位置后,我们计算机的环境变量仍未改变,依旧是当时安装Java时的配置。步骤:控制面板—>系统和安全—>系统—>高级系统设置—>环境......
  • java锁
    1.什么是锁针对于一个共享资源,如果有两个或两个以上的线程访问该资源,可能会导致该共享资源最后的结果与我们预期的结果不一致。比如一个共享变量,其中A线程将其从0循环加一十次,最后结果为十,但是再A线程对该变量循环加一的时候,有个B线程进行了改边该变量,那么可能最后A线程执行结束......
  • From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
    FromJavaToKotlin,空安全、扩展、函数、Lambda概述(Summarize)• Kotlin是什么?• 可以做什么?• Android官方开发语言从Java变为Kotlin,Java有哪些问题?• Kotlin的优点• Kotlin特性(Features)Kotlin是什么?Kotlin出自于捷克一家软件研发公司 JetB......