JAVA实现查询栏目、类别(菜单)返回树结构(递归)

 

 

以下只能适用于栏目类别没有很多情况,如果太多的话,这种方式会很卡,

栏目多的可以参考:https://www.cnblogs.com/pxblog/p/15601238.html

 

其中Channel.java是栏目结构,ChannelDto是我自己封装的返回给前端的数据,可以根据自己的来

这个的逻辑就是双重循环遍历每个类别,然后判断如果当前类别是其他类别的父级,那么就把其他类别的数据数据放到当前栏目的子集中

 

如果不想显示所有的栏目 可以修改这个判断 就会只展示这个栏目下的所有数据

channel.getPid().toString().equals("0")

 

这个直接查询所有栏目数据传进去即可

List<Channel> list

 

代码

复制代码
public List<ChannelDto> parseMenuTree(List<Channel> list) {
        List<ChannelDto> result = new ArrayList<ChannelDto>();

        //1.获取第一个节点
        for (Channel channel : list) {
            if (channel.getPid().toString().equals("0")) {
                ChannelDto dto = new ChannelDto();
                dto.setId(channel.getId().intValue())
                        .setChannelTitle(channel.getChannelTitle());
                result.add(dto);
            }
        }

        //2.获取递归子节点
        for (ChannelDto parent : result) {
            parent = menuChild(parent, list);
        }
        return result;
    }

    public ChannelDto menuChild(ChannelDto parent, List<Channel> list) {
        for (Channel channel : list) {
            if (parent.getId().equals(channel.getPid().intValue())) {
                ChannelDto dto = new ChannelDto();
                dto.setId(channel.getId().intValue())
                        .setChannelTitle(channel.getChannelTitle());
                if (parent.getChildList() == null) {
                    parent.setChildList(new ArrayList<ChannelDto>());
                }
                parent.getChildList().add(dto);
                dto = menuChild(dto, list);
            }
        }
        return parent;
    }
复制代码

 

id:当前栏目的ID

pid:当前栏目的父级ID

childList:当前栏目的子集

 

最终展示成json是这个样子

 

复制代码
    {
          "id": 14,
          "channelTitle": "一级分类",
          "childList": [
            {
              "id": 15,
              "channelTitle": "二级分类",
              "childList": [
                {
                  "id": 16,
                  "channelTitle": "三级分类"
                },
                {
                  "id": 18,
                  "channelTitle": "三级其他"
                }
              ]
            },
            {
              "id": 19,
              "channelTitle": "其他二级1"
            }
          ]
        }
复制代码

 

posted @   yvioo  阅读(920)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2020-03-27 js(jQuery)获取自定义data属性的值
2020-03-27 Spring整合redis
点击右上角即可分享
微信分享提示