zoukankan      html  css  js  c++  java
  • JAVA实现查询栏目、类别(菜单)返回树结构(递归)

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

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

    代码

    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"
                }
              ]
            }
    -----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------ (蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
  • 相关阅读:
    洛谷P1527 矩阵乘法——二维树状数组+整体二分
    bzoj1503 [NOI2004]郁闷的出纳员——splay
    bzoj4811 [Ynoi2017]由乃的OJ 树链剖分+位运算
    D Dandan's lunch
    C Sleepy Kaguya
    B bearBaby loves sleeping
    A AFei Loves Magic
    II play with GG
    angular的路由和监听路由的变化和用户超时的监听
    ng-disabled 指令
  • 原文地址:https://www.cnblogs.com/pxblog/p/14587150.html
Copyright © 2011-2022 走看看