JAVA查询类别(菜单)下的所有子类别(递归)

时间:2024-03-12 17:21:56

 

 

/**
     * 获取父类别下面的所有子类别
     * @return List<StoreGoodsCate> 返回当前类别下的所有子类别集合
     */
    public List<StoreGoodsCate> getCateNode(List<StoreGoodsCate> storeGoodsCates){
        List<StoreGoodsCate> newCateIdNode = new ArrayList<>();
        for(StoreGoodsCate cate: storeGoodsCates){
            if(getCateChildren(cate).size() != 0){
                //还有子类别,递归查询所有子类别
                newCateIdNode.addAll(getCateNode(getCateChildren(cate)));
            }else{
                //没有子类别,把当前节点添加到集合中
                newCateIdNode.add(cate);
            }
        }
        return newCateIdNode;
    }

    /**
     * 查询当前类别的子类别集合
     *  这里根据自己实际项目方法即可
     * @param storeGoodsCate
     * @return
     */
    public List<StoreGoodsCate> getCateChildren(StoreGoodsCate storeGoodsCate){
        QueryWrapper<StoreGoodsCate> queryWrapper = new QueryWrapper<StoreGoodsCate>()
                .eq("pid", storeGoodsCate.getId())
                .eq("is_deleted", 0);
       return cateService.list(queryWrapper);
    }

 

这种方法只能适用于数据量比较少的,如果数据量很大,这种查询方式会非常慢,慎用