hierarchy-utils 升级 1.0.2,增加递归遍历树形数据处理

来源: 投稿
作者: joker-pper
2024-07-07 19:58:00

hierarchy-utils (或比 hutool 树形处理工具 TreeUtil 更好使~)

用于构建/查找具有层级关系树形数据的工具库,以解决业务中常见的树形数据处理需求
支持自定义过滤数据、排序及转换数据、打平递归树数据、递归遍历树形数据处理等

更新内容如下:

增加递归遍历树形数据处理 (可用于用户处理自定义业务逻辑)

示例:

        Integer rootId = -1;
        List<Menu> treeResults = MenuResolver.getResolvedWithChildrenMenuList(rootId);
        HierarchyEachUtils.recursionEach(treeResults, Menu::getChildren, new HierarchyEachUtils.EachCallback<Menu>() {

            @Override
            public boolean withParentList() {
                //设置启用,后续用于获取遍历元素的所有父级列表
                return true;
            }

            @Override
            public void beforeEach(List<Menu> sourceList) {
               //对源数据列表进行处理,比如有多个进行排个序?
            }

            @Override
            public void each(int level, Menu current, Menu parent, List<Menu> parentList, List<Menu> children, boolean hasExistChildren) {

                if (hasExistChildren) {
                    //排序子元素 -- 降序
                    children.sort(Comparator.comparing(Menu::getSort).reversed());
                }

                if (level == HierarchyEachUtils.FIRST_LEVEL) {
                    //第一层级时 -- 没有真实存在的父元素
                    System.out.println(String.format("level: %s, id: %s, sort: %s, parent id: %s, path: %s", level, current.getId(), current.getSort(), "-", current.getId()));
                } else {
                    System.out.println(String.format("level: %s, id: %s, sort: %s, parent id: %s, path: %s", level, current.getId(), current.getSort(), parent.getId(), Stream.of(parentList, Collections.singletonList(current)).flatMap(Collection::stream).map(Menu::getId).map(String::valueOf)
                            .collect(Collectors.joining("-"))));

                }
            }
        });
展开阅读全文
点击加入讨论🔥(2) 发布并加入讨论🔥
2 评论
1 收藏
分享
返回顶部
顶部