Java實現多級分類查詢(樹形結構)


Java實現多級分類查詢

1、效果預覽

{
  "success": true,
  "code": 20000,
  "message": "成功",
  "data": {
    "list": [
      {
        "id": "1450294498352435201",
        "parentId": "0",
        "title": "前端開發",
        "children": [
          {
            "id": "1450294498415349761",
            "parentId": "1450294498352435201",
            "title": "vue",
            "children": []
          },
          {
            "id": "1450294498478264322",
            "parentId": "1450294498352435201",
            "title": "JavaScript",
            "children": []
          },
          {
            "id": "1450294498478264323",
            "parentId": "1450294498352435201",
            "title": "jquery",
            "children": []
          }
        ]
      },
      {
        "id": "1450294498541178882",
        "parentId": "0",
        "title": "后端開發",
        "children": [
          {
            "id": "1450294498541178883",
            "parentId": "1450294498541178882",
            "title": "Java",
            "children": []
          },
          {
            "id": "1450294498608287745",
            "parentId": "1450294498541178882",
            "title": "C++",
            "children": []
          }
        ]
      },
      {
        "id": "1450294498671202305",
        "parentId": "0",
        "title": "數據庫開發",
        "children": [
          {
            "id": "1450294498671202306",
            "parentId": "1450294498671202305",
            "title": "mysql",
            "children": [
              {
                "id": "2343243242343243242",
                "parentId": "1450294498671202306",
                "title": "的風格",
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
}

2、編寫SubjectVO

@Data
public class SubjectVO {
    private String id;
    private String parentId;
    private String title;
    private List<SubjectVO> children;
}

3、編寫service

@Override
    public List<SubjectVO> listWithTree() {
        List<EduSubject> entities = list();
        //把EduSubject的數組entities包裝成SubjectVO數組
        List<SubjectVO> subjectVOS = entities.stream().map(subject -> {
            SubjectVO subjectVO = new SubjectVO();
            BeanUtils.copyProperties(subject, subjectVO);
            return subjectVO;
        }).collect(Collectors.toList());
        //filter是java8的寫法,取得所有parentId為0的數據,也就是一級目錄
        //map也是java8的寫法,用於封裝數據,取得他的孩子(也就是下級目錄)的數據
        List<SubjectVO> list = subjectVOS.stream().filter(subjectVO ->
                subjectVO.getParentId().equals("0")
        ).map((menu)->{
            menu.setChildren(getChildrenData(menu,subjectVOS));
            return menu;
        }).collect(Collectors.toList());
        return list;
    }
    private List<SubjectVO> getChildrenData(SubjectVO root, List<SubjectVO> all) {
        List<SubjectVO> children = all.stream().filter(subjectVO ->
                subjectVO.getParentId().equals(root.getId())
        ).map(subjectVO -> {
            subjectVO.setChildren(getChildrenData(subjectVO,all));
            return subjectVO;
        }).collect(Collectors.toList());
        return children;
    }

注:本文僅限於個人學習記錄
查看原文:https://blog.csdn.net/coding_lin/article/details/113447422


免責聲明!

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



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