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 @ 2021-03-27 21:50  yvioo  阅读(897)  评论(0编辑  收藏  举报