java 无限级分类

数据结构

{
    "productCode":100,
    "menuList": [
        {
            "code": 1001,
            "parentCode": null,
            "name": "触达预览",
            "sort": 0
        },{
            "code": 1002,
            "parentCode": null,
            "name": "营销策略",
            "sort": 0
        },{
            "code": 1003,
            "parentCode": null,
            "name": "内容与资产",
            "sort": 0
        },{
            "code": 2001,
            "parentCode": "1001",
            "name": "业务总览",
            "sort": 0
        },
        {
            "code": 2002,
            "parentCode": "1002",
            "name": "流程画布",
            "sort": 0
        },
        {
            "code": 3001,
            "parentCode": "2002",
            "name": "触达任务",
            "sort": 1
        }
    ]
}

代码

private static List<MenuTreeVO> getTree(List<MenuTreeVO> list){
        if (ObjectUtil.isEmpty(list)){
            return null;
        }
        //构造以菜单CODE为key 对象为value的map
        Map<String,MenuTreeVO> map = list.stream().collect(Collectors.toMap(MenuTreeVO::getCode, item -> item));

        //遍历原list,在map中查找,若存在父级则追加到他的children中
        list.stream().filter(o->StrUtil.isNotBlank(o.getParentCode())).forEach(item -> {
            Optional.ofNullable(map.get(item.getParentCode()))
                    .ifPresent(parent -> {
                        List<MenuTreeVO> children = parent.getChildren();
                        if (children == null) {
                            children = new ArrayList<>();
                            parent.setChildren(children);
                        }
                        children.add(item);
                    });
        });
        //节省内存占用
        map.clear();
        //只取出顶级分类
        return list.stream().filter(item -> StrUtil.isBlank(item.getParentCode())).collect(Collectors.toList());
    }

结果测试

[
        {
            "id": 1765987779571957761,
            "code": "1001",
            "parentCode": null,
            "name": "触达预览",
            "sort": 0,
            "checked": false,
            "children": [
                {
                    "id": 1765987779571957764,
                    "code": "2001",
                    "parentCode": "1001",
                    "name": "业务总览",
                    "sort": 0,
                    "checked": false,
                    "children": null
                }
            ]
        },
        {
            "id": 1765987779571957762,
            "code": "1002",
            "parentCode": null,
            "name": "营销策略",
            "sort": 0,
            "checked": false,
            "children": [
                {
                    "id": 1765987779571957765,
                    "code": "2002",
                    "parentCode": "1002",
                    "name": "流程画布",
                    "sort": 0,
                    "checked": false,
                    "children": [
                        {
                            "id": 1765987779571957766,
                            "code": "3001",
                            "parentCode": "2002",
                            "name": "触达任务",
                            "sort": 1,
                            "checked": false,
                            "children": null
                        }
                    ]
                }
            ]
        },
        {
            "id": 1765987779571957763,
            "code": "1003",
            "parentCode": null,
            "name": "内容与资产",
            "sort": 0,
            "checked": false,
            "children": null
        }
    ]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容