三级分类java代码

电商项目里常见的三级分类,代码如下:


首先,Category实体类:

public class Category {

    private Integer id;
    private Integer pid;   // 父分类id
    private Integer c_level;   // 本分类级别
    private String c_name;    // 本分类名称
    private Integer sort;    // 排序字段
    private List<Category> children;   // 子分类集合

    public Category(Integer id, Integer pid, Integer c_level, String c_name, Integer sort) {
        this.id = id;
        this.pid = pid;
        this.c_level = c_level;
        this.c_name = c_name;
        this.sort = sort;
    }

    public Integer getId() {
        return id;
    }

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

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

    public void setChildren(List<Category> children) {
        this.children = children;
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public Integer getC_level() {
        return c_level;
    }

    public void setC_level(Integer c_level) {
        this.c_level = c_level;
    }

    public String getC_name() {
        return c_name;
    }

    public void setC_name(String c_name) {
        this.c_name = c_name;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    @Override
    public String toString() {
        return "Category{" +
                "id=" + id +
                ", pid=" + pid +
                ", c_level=" + c_level +
                ", c_name='" + c_name + '\'' +
                ", sort=" + sort +
                ", children=" + children +
                '}';
    }
}

然后是三级分类代码,最终要按一级分类返回,每个一级分类下带着自己的二级分类,每个二级分类下也携带三级分类。 

import com.alibaba.fastjson.JSON;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;


public class TestCategorization {

    public static void main(String[] args) throws Exception {

        Category c1 = new Category(1,0,1,"一级分类1",0);
        Category c2 = new Category(2,0,1,"一级分类2",0);

        Category c3 = new Category(3,1,2,"二级分类1",0);
        Category c4 = new Category(4,1,2,"二级分类2",0);
        Category c5 = new Category(5,1,2,"二级分类3",0);
        c3.setSort(0);
        c4.setSort(5);
        c5.setSort(2);

        Category c6 = new Category(6,2,2,"二级分类4",0);
        Category c7 = new Category(7,2,2,"二级分类5",0);

        Category c8 = new Category(8,3,3,"三级分类1",0);
        Category c9 = new Category(9,3,3,"三级分类2",0);
        Category c10 = new Category(10,4,3,"三级分类3",0);
        Category c11 = new Category(11,4,3,"三级分类4",0);
        Category c12 = new Category(12,5,3,"三级分类5",0);
        Category c13 = new Category(13,5,3,"三级分类6",0);
        Category c14 = new Category(14,5,3,"三级分类7",0);
        Category c15 = new Category(15,6,3,"三级分类8",0);
        Category c16 = new Category(16,6,3,"三级分类9",0);
        Category c17 = new Category(17,7,3,"三级分类10",0);
        Category c18 = new Category(18,7,3,"三级分类11",0);

        List<Category> list = new LinkedList<>();

        list.add(c1);
        list.add(c2);
        list.add(c3);
        list.add(c4);
        list.add(c5);
        list.add(c6);
        list.add(c7);
        list.add(c8);
        list.add(c9);
        list.add(c10);
        list.add(c11);
        list.add(c12);
        list.add(c13);
        list.add(c14);
        list.add(c15);
        list.add(c16);
        list.add(c17);
        list.add(c18);

        List<Category> result = listInTree(list);
        System.out.println(JSON.toJSON(result));

    }

    private static List<Category> listInTree(List<Category> list) {

        return list.stream().filter(e->e.getC_level()==1)
                .peek(e-> e.setChildren(getChildren(e, list)))  // 注意peek方法用来遍历操作!
                .sorted(Comparator.comparingInt(Category::getSort))  
                .collect(Collectors.toList());
    }

    private static List<Category> getChildren(Category parent, List<Category> list) {

        return list.stream().filter(e -> e.getPid().equals(parent.getId()))
                .peek(e->e.setChildren(getChildren(e, list)))
                .sorted(Comparator.comparingInt(Category::getSort))
                .collect(Collectors.toList());

    }
}

运行结果转为了Json,可用工具查看。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值