JAVA中把list进行递归树形展示

JAVA通过泛型把List转成treeList

1.核心类:TreeListUtil<T extends TreeListDTO>
依赖基础类TreeListDTO

package com.example.demo.utils;

import com.example.demo.controller.dto.TreeListDTO;
import java.util.ArrayList;
import java.util.List;

public class TreeListUtil<T extends TreeListDTO<T>> {
    public List<T> treeList(List<T> list, Integer parentId) {
        List<T> treeListResult = new ArrayList<>();
        for (T each : list) {
            if (parentId.equals(each.getParentId())) {
                each.setChildren(treeList(list,each.getId()));
                treeListResult.add(each);
            }
        }
        return treeListResult;
    }
}

2.基础类:TreeListDTO

package com.example.demo.controller.dto;

import java.util.List;

public class TreeListDTO<T> {
    private Integer id;
    private Integer parentId;
    private List<T> Children;

    public Integer getId() {
        return id;
    }

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

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public List<T> getChildren() {
        return Children;
    }

    public void setChildren(List<T> children) {
        Children = children;
    }
}

3.引用核心类把菜单进行递归展示:
依赖菜单类MenuDTO

public List<MenuDTO> getMenu(){
        //创建一级菜单水果
        MenuDTO menuDTO1 = new MenuDTO();
        menuDTO1.setId(1);
        menuDTO1.setName("水果");
        menuDTO1.setParentId(0);
        //创建一级菜单蔬菜
        MenuDTO menuDTO2 = new MenuDTO();
        menuDTO2.setId(2);
        menuDTO2.setName("蔬菜");
        menuDTO2.setParentId(0);
        //创建二级菜单蔬菜
        MenuDTO menuDTO3 = new MenuDTO();
        menuDTO3.setId(3);
        menuDTO3.setName("苹果");
        menuDTO3.setParentId(1);
        //添加到menuDTOList
        List<MenuDTO> menuDTOList = new ArrayList<>();
        menuDTOList.add(menuDTO1);
        menuDTOList.add(menuDTO2);
        menuDTOList.add(menuDTO3);
        //引入TreeListUtil
        TreeListUtil<MenuDTO> treeListUtil = new TreeListUtil<MenuDTO>();
        return treeListUtil.treeList(menuDTOList,0);
    }

4.菜单类MenuDTO:

package com.example.demo.controller.dto;

public class MenuDTO extends TreeListDTO<MenuDTO> {
    private String name;

    public String getName() {
        return name;
    }

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

展示效果如下:

[
    {
        "id": 1,
        "parentId": 0,
        "name": "水果",
        "children": [
            {
                "id": 3,
                "parentId": 1,
                "name": "苹果",
                "children": []
            }
        ]
    },
    {
        "id": 2,
        "parentId": 0,
        "name": "蔬菜",
        "children": []
    }
]

优点:想要递归展示的类都可以继承TreeListDTO,并且调用核心转换方法即可,
缺点:依赖TreeListDTO

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值