美文网首页
java 无限级分类

java 无限级分类

作者: 夜空中乄最亮的星 | 来源:发表于2024-03-07 18:21 被阅读0次

数据结构

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

相关文章

  • Java递归--无限级分类

    递归 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例...

  • 无限级分类

    1.有两种实现方式:a.递归方式,b.迭代方式; a.递归方式:(实现家谱树和子孙树) 家谱树: /** ...

  • 2018-12-10

    复习无限级分类

  • 预排序遍历树

    什么是左右值无限级分类左右值无限级分类,也称为预排序树无限级分类,是一种有序的树状结构,位于这些树状结构中的每一个...

  • 2018 10 16

    学习商城的无限级分类

  • PHP无限级分类

    layout: posttitle: "PHP无限级分类"date: 2016-04-29 09:36:19 +0...

  • laravel无限级分类

    用laravel 做无限极分类;找了很多资料;假大空;有很多都是残缺的;而且达不到预期;无法做到无限极;今天分享下...

  • golang 无限级分类

    分类结构 分类列表如下 递归实现

  • PHP无限级分类(一)

    无限级分类在web项目中应用非常广泛,比如商品分类、权限节点、组织架构等等。下面介绍两种将二维数组整理成无限级树形...

  • PHP无限级分类(二)

    在 PHP无限级分类(一) 中,我们介绍了两种简单的无限级分类构造方法。下面介绍一种从树形结构中获取子结构的方法:...

网友评论

      本文标题:java 无限级分类

      本文链接:https://www.haomeiwen.com/subject/jfxezdtx.html