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才可以)
  • 相关阅读:
    mac+chrome 最常用快捷键
    关于<form> autocomplete 属性
    MAC vim修改hosts文件
    git 使用详解(3)—— 最基本命令 + .gitignore 文件
    git 使用详解(2)——安装+配置+获取帮助
    vue动态生成组件
    slot插槽
    provide 和 inject高阶使用
    js正则验证表达式验证
    angular常用命令整理
  • 原文地址:https://www.cnblogs.com/pxblog/p/14587150.html
Copyright © 2011-2022 走看看