Yiuman/citrus

简单树报错

LmangM opened this issue · 2 comments

简单树形结构报错,如图所示树形顶级的父类id为null
尝试将顶级父类id定义为“0”后,方法的第三行报错,再次将第三行的current.getParentId()定义为“0”后,只能得到顶级那一层的数据

微信截图_20220819182202

    private void listToTree(E current, final List<E> list) {
        Map<K, List<E>> parentIdChildrenMap = list.stream().collect(Collectors.groupingBy(Tree::getParentId));
        for (E entity : list) {
            K id = entity.getId();
            List<E> es = parentIdChildrenMap.get(id);
            if (null != es) {
                List<E> collect = es.stream().distinct().collect(Collectors.toList());
                entity.setChildren(collect);
            }
        }
        current.setChildren(list.stream().filter(entity -> Objects.equals(entity.getParentId(), 0L)).collect(Collectors.toList()));
    }

同时在判断获取普通树形或左右值树的service时,总是进入左右值的方法,所以我将此处的superclass.isAssignableFrom改成了equals

// 超类比较
            if (superclass.equals(BasePreOrderTree.class)) {
                return CrudUtils.getCrudService(
                        getModelClass(),
                        (Class<K>) TypeUtil.getTypeArgument(getClass(), 1),
                        BasePreOrderTreeService.class
                );
            }

👍 dev分支是有调整的 可以看下dev分支 若还有问题 。方便的话可以提个PR @LmangM

至于超类判断是写错了:( 改成BasePreOrderTree.class.isAssignableFrom(modelClass)就好了 @LmangM