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才可以)
  • 相关阅读:
    1.文件I/O
    sqlite-按日期分组,根据日期查询详细内容
    sqlite-在数据库中创建默认时间
    Git-git 忽略 IntelliJ .idea文件
    重启猫(modem)的方法
    从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估
    畅所欲言第1期
    使用属性表:VS2013上配置OpenCV
    关于OOM那些事儿
    深度学习之江湖~那些大神们
  • 原文地址:https://www.cnblogs.com/pxblog/p/14587150.html
Copyright © 2011-2022 走看看