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"
            }
          ]
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM