樹形數據組裝最簡單的方法-Java


開發中我們經常遇到分類設計,除了表設計復雜之外,其數據組裝也較為復雜

方法並不是原創,看了別的代碼才有的思路,

要看懂以下代碼需掌握java 8的stream和Lambda 表達式

組裝有很多種方法,下面介紹一種我認為最簡單的,但並不是最好理解的方法,

1、有如下表結構

比如這種常見可擴展的分類

又比如這種復雜的十級分類

2、后端如何組裝呢?

2.1、以三級分類為例

2.2、第一步:數據可查出所有數據

 // 1、查詢所有數據->走數據庫
 List<PmsCategory> alldata = categorService.query(page, data);
 // 2、modal 中加入List<PmsCategory> 以及其getter、setter
 // 子分類
 private List<PmsCategory> child;

2.3、利用強大的stream流進行處理

    public List<PmsCategory> queryListTree(){
        // 1、1、查詢所有數據->走數據庫
         List<PmsCategory> pmsCategories = categoryDao.selectByExample(pmsCategoryAll);
        // 2、找到一級分類 判斷條件是parentCid == 0 或者level ==1
        List<PmsCategory> collect = alldata.stream().filter((category) -> {
            return category.getParentCid() == 0;
        }).map((meun) -> {
            //2、調用查詢子數據
            meun.setChild(child(meun,alldata));
            return meun;
        }).sorted((menu1,meun2) ->{
            // 排序可自定義
            return (menu1.getSort() == null?0:menu1.getSort()) - (meun2.getSort() == null?0:meun2.getSort());
        }).collect(Collectors.toList());

        return collect;

    }
    private List<PmsCategory> child(PmsCategory root,List<PmsCategory> pmsCategories){
        List<PmsCategory> collect = pmsCategories.stream().filter((category) -> {
            return category.getParentCid().equals(root.getCatId());
        }).map((category) -> {
            // 找到子數據,注意這里式遞歸查找,子集有可能還有子集
            category.setChild(child(category, pmsCategories));
            return category;
        }).sorted((menu1, menu2) -> {
            // 也可以子那個規則排序
            return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort() == null?0:menu2.getSort());
        }).collect(Collectors.toList());
        return collect;
    }

3、清求測試

3.1、可以看到請求回來的數據就是我們想要的結構,父級里面嵌套子集

{
    "riestcode": 0,
    "riestmsg": "success",
    "retdata": {
		"datalist": [
            {
                "catId": 2,
                "name": "手機",
                "parentCid": 0,
                "catLevel": 1,
                "showStatus": 1,
                "sort": 0,
                "icon": null,
                "productUnit": null,
                "productCount": 0,
                "child": [
                    {
                        "catId": 34,
                        "name": "手機通訊",
                        "parentCid": 2,
                        "catLevel": 2,
                        "showStatus": 1,
                        "sort": 0,
                        "icon": null,
                        "productUnit": null,
                        "productCount": 0,
                        "child": [
                            {
                                "catId": 226,
                                "name": "對講機",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": 0,
                                "icon": null,
                                "productUnit": null,
                                "productCount": 0,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1437,
                                "name": "1226測試",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1438,
                                "name": "1226測試-03",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1439,
                                "name": "1226測試",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            }
                        ],
                    }
            }

以上就是對樹形數據的組裝思路。


免責聲明!

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



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