JAVA 递归实现无限分类目录

创建一个实体类 Category.java,在默认的 DemoApplicationTests.java 里写其它代码,然后运行测试方法。

这是从网上找的,能运行成功,需要再构造多一些的数据和层级进行测试验证。

Category 是我补上的,暂时未发现有问题。

Category.java

package com.example.demo;

/**
 * 作者:zjh
 * 日期:2022/7/10 23:23
 * 摘要:未填写
 */

public class Category {
    private int id;
    private String name;
    private int parent_id;

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    private int level;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getParent_id() {
        return parent_id;
    }

    public void setParent_id(int parent_id) {
        this.parent_id = parent_id;
    }
}

  DemoApplicationTests.java

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;



@SpringBootTest
class DemoApplicationTests {

    public static List<Category> cates;
    private static List<Category> tmpCates = new ArrayList<Category>();

    @Test
    void contextLoads() {


    }

    /**
     * 运行这个试试吧
     * */
    @Test
    void test(){
        init();
        List<Category> cList = tree( cates , 0 , 0 );
        for (Category c:cList) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < c.getLevel(); i++){
                sb.append("--");
            }
            System.out.println( sb.toString() + c.getName() );
        }
    }

    /**
     * 递归
     *
     * */
    public static List<Category> tree( List<Category> cs , Integer pid , Integer level ){
        for (Category c: cs) {
            if( c.getParent_id() == pid ){
                c.setLevel( level );
                tmpCates.add(c);
                tree( cs , c.getId() , level+1 );
            }
        }
        return tmpCates;
    }

    public static void init(){
        cates = new ArrayList<Category>();
        Category c1 = new Category();
        c1.setId(1);
        c1.setName("广东");
        c1.setParent_id(0);
        cates.add(c1);

        c1 = new Category();
        c1.setId(2);
        c1.setName("陕西");
        c1.setParent_id(0);
        cates.add(c1);

        c1 = new Category();
        c1.setId(3);
        c1.setName("四川");
        c1.setParent_id(0);
        cates.add(c1);

        c1 = new Category();
        c1.setId(5);
        c1.setName("深圳");
        c1.setParent_id(1);
        cates.add(c1);

        c1 = new Category();
        c1.setId(6);
        c1.setName("陕西");
        c1.setParent_id(2);
        cates.add(c1);

        c1 = new Category();
        c1.setId(8);
        c1.setName("成都");
        c1.setParent_id(3);
        cates.add(c1);

        c1 = new Category();
        c1.setId(9);
        c1.setName("宝鸡");
        c1.setParent_id(2);
        cates.add(c1);




    }
}

  执行结果

 

构造更多数据测试

 

代码

  //1 根
        Category c1 = new Category();
        c1.setId(1);
        c1.setName("分类0");
        c1.setParent_id(0);
        cates.add(c1);

        //2
        c1 = new Category();
        c1.setId(2);
        c1.setName("分类1");
        c1.setParent_id(1);
        cates.add(c1);

        //3
        c1 = new Category();
        c1.setId(3);
        c1.setName("分类1-1");
        c1.setParent_id(2);
        cates.add(c1);

        //4
        c1 = new Category();
        c1.setId(4);
        c1.setName("分类1-1-1");
        c1.setParent_id(3);
        cates.add(c1);

        //5
        c1 = new Category();
        c1.setId(5);
        c1.setName("分类1-1-2");
        c1.setParent_id(3);
        cates.add(c1);

        //6
        c1 = new Category();
        c1.setId(6);
        c1.setName("分类1-1-3");
        c1.setParent_id(3);
        cates.add(c1);

        //7
        c1 = new Category();
        c1.setId(7);
        c1.setName("分类1-2");
        c1.setParent_id(2);
        cates.add(c1);

        //8
        c1 = new Category();
        c1.setId(8);
        c1.setName("分类1-2-1");
        c1.setParent_id(7);
        cates.add(c1);

        //9
        c1 = new Category();
        c1.setId(9);
        c1.setName("分类1-2-2");
        c1.setParent_id(7);
        cates.add(c1);

        //10
        c1 = new Category();
        c1.setId(10);
        c1.setName("分类1-2-3");
        c1.setParent_id(7);
        cates.add(c1);

        //11
        c1 = new Category();
        c1.setId(11);
        c1.setName("分类1-3");
        c1.setParent_id(2);
        cates.add(c1);

        //12
        c1 = new Category();
        c1.setId(12);
        c1.setName("分类1-3-1");
        c1.setParent_id(11);
        cates.add(c1);

        //13
        c1 = new Category();
        c1.setId(13);
        c1.setName("分类1-3-2");
        c1.setParent_id(11);
        cates.add(c1);

        //14
        c1 = new Category();
        c1.setId(14);
        c1.setName("分类1-3-3");
        c1.setParent_id(11);
        cates.add(c1);

        //15
        c1 = new Category();
        c1.setId(15);
        c1.setName("分类1-3-4");
        c1.setParent_id(11);
        cates.add(c1);

        //16
        c1 = new Category();
        c1.setId(16);
        c1.setName("分类1-3-5");
        c1.setParent_id(11);
        cates.add(c1);

        //17
        c1 = new Category();
        c1.setId(17);
        c1.setName("分类1-3-6");
        c1.setParent_id(11);
        cates.add(c1);

        //18
        c1 = new Category();
        c1.setId(18);
        c1.setName("分类2");
        c1.setParent_id(1);
        cates.add(c1);

        //19
        c1 = new Category();
        c1.setId(19);
        c1.setName("分类2-1");
        c1.setParent_id(18);
        cates.add(c1);

        //20
        c1 = new Category();
        c1.setId(20);
        c1.setName("分类2-2");
        c1.setParent_id(18);
        cates.add(c1);

        //21
        c1 = new Category();
        c1.setId(21);
        c1.setName("分类2-2-1");
        c1.setParent_id(20);
        cates.add(c1);

        //22
        c1 = new Category();
        c1.setId(22);
        c1.setName("分类2-2-2");
        c1.setParent_id(20);
        cates.add(c1);

        //23
        c1 = new Category();
        c1.setId(23);
        c1.setName("分类2-2-3");
        c1.setParent_id(20);
        cates.add(c1);

        //24
        c1 = new Category();
        c1.setId(24);
        c1.setName("分类2-2-4");
        c1.setParent_id(20);
        cates.add(c1);

        //25
        c1 = new Category();
        c1.setId(25);
        c1.setName("分类2-2-4-1");
        c1.setParent_id(24);
        cates.add(c1);

        //26
        c1 = new Category();
        c1.setId(26);
        c1.setName("分类2-2-4-2");
        c1.setParent_id(24);
        cates.add(c1);

        //27
        c1 = new Category();
        c1.setId(27);
        c1.setName("分类2-2-4-3");
        c1.setParent_id(24);
        cates.add(c1);

        //28
        c1 = new Category();
        c1.setId(28);
        c1.setName("分类2-2-4-4");
        c1.setParent_id(24);
        cates.add(c1);

        //29
        c1 = new Category();
        c1.setId(29);
        c1.setName("分类2-2-5");
        c1.setParent_id(20);
        cates.add(c1);

        //30
        c1 = new Category();
        c1.setId(30);
        c1.setName("分类2-3");
        c1.setParent_id(18);
        cates.add(c1);

        //31
        c1 = new Category();
        c1.setId(31);
        c1.setName("分类2-4");
        c1.setParent_id(18);
        cates.add(c1);

        //32
        c1 = new Category();
        c1.setId(32);
        c1.setName("分类2-4-1");
        c1.setParent_id(31);
        cates.add(c1);

        //33
        c1 = new Category();
        c1.setId(33);
        c1.setName("分类2-4-2");
        c1.setParent_id(31);
        cates.add(c1);

        //34
        c1 = new Category();
        c1.setId(34);
        c1.setName("分类2-5");
        c1.setParent_id(18);
        cates.add(c1);

  

输出结果

分类0
--分类1
----分类1-1
------分类1-1-1
------分类1-1-2
------分类1-1-3
----分类1-2
------分类1-2-1
------分类1-2-2
------分类1-2-3
----分类1-3
------分类1-3-1
------分类1-3-2
------分类1-3-3
------分类1-3-4
------分类1-3-5
------分类1-3-6
--分类2
----分类2-1
----分类2-2
------分类2-2-1
------分类2-2-2
------分类2-2-3
------分类2-2-4
--------分类2-2-4-1
--------分类2-2-4-2
--------分类2-2-4-3
--------分类2-2-4-4
------分类2-2-5
----分类2-3
----分类2-4
------分类2-4-1
------分类2-4-2
----分类2-5

  如上输出,与 Excel 中计划的一样,说明这个树型分类代码是可用的。

 

posted @ 2023-07-11 10:49  牛大胆V5  阅读(20)  评论(0)    收藏  举报