树状结构数据,筛选指定数据

文章讲述了在处理树状结构数据时,如何通过递归方法筛选出进行CRUD操作后发生变化的部分。作者提供了两个关键函数:`screenTree`用于整体筛选,`getSubsetPmsPlanPo`负责递归查找符合条件的子节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:
应用场景和需求:对一个树状结构的数据,进行CRUD 时,想筛选出 树状结构数据中存在变动的部分。
树状结构图片

操作步骤

准备需要的数据:
1.先拿到 你原来的树状结构数据
2.再筛选出 需要保留的数据集合id,也就是对应的CRUD数据id

/**
     * 树形筛选查找
     * @param treeDtoList 树形集合
     * @param idList 筛选条件(可以是其他条件)
     * @return 包含的节点数据
     */
    public static List<DocumentCatalogue> screenTree(List<DocumentCatalogue> treeDtoList, List<String> idList){
        //最后返回的筛选完成的集合
        List<DocumentCatalogue> screeningOfCompleteList = new ArrayList<>();
        if (treeDtoList.size()>0 && idList.size()>0 ){
            for (DocumentCatalogue DocumentCatalogue : treeDtoList){
            	//获取子集 数据
                List<DocumentCatalogue> subsetList = DocumentCatalogue.getChildren();
                //递归筛选完成后的返回的需要添加的数据
                DocumentCatalogue addTreeDto = getSubsetPmsPlanPo(DocumentCatalogue,subsetList,idList);
                //如果筛选完的数据 不为空则添加到 返回的集合中
                if (addTreeDto!=null){
                    screeningOfCompleteList.add(addTreeDto);
                }
            }
            return screeningOfCompleteList;
        }
        return null;
    }

递归筛选

 /**
     * 筛选符合的集合并返回
     * @param DocumentCatalogue 树形类
     * @param subsetTreeDtoList 子集集合
     * @param idList 筛选条件
     * @return 筛选成功的类
     */
    public static DocumentCatalogue getSubsetPmsPlanPo(DocumentCatalogue DocumentCatalogue,List<DocumentCatalogue> subsetTreeDtoList,List<String> idList){
        //作为筛选条件的判断值,也就是拿到 当前子集的id
        String id = DocumentCatalogue.getId();
        //判断当前 树状结构是否还存在子集,如果存在则继续向下递归查找
        if (subsetTreeDtoList.size()>0 ){
            List<DocumentCatalogue> addTreeDtoList = new ArrayList<>();
            for (DocumentCatalogue subsetTreeDto : subsetTreeDtoList){
            	//拿到子集
                List<DocumentCatalogue> subsetList = subsetTreeDto.getChildren();
                //继续向下向下递归查找
                DocumentCatalogue newTreeDto = getSubsetPmsPlanPo(subsetTreeDto,subsetList,idList);
                //当子集筛选完不为空时添加
                if (newTreeDto!=null){
                    addTreeDtoList.add(newTreeDto);
                }
            }
            //子集满足条件筛选时集合不为空时,替换对象集合内容并返回当前对象
            if (addTreeDtoList.size()>0){
                DocumentCatalogue.setChildren(addTreeDtoList);
                return DocumentCatalogue;
                //当前对象子集对象不满足条件时,判断当前对象自己是否满足筛选条件,满足设置子集集合为空,并返回当前对象
            }else if (addTreeDtoList.size()>0&& idList.contains(id)){
                DocumentCatalogue.setChildren(null);
                return DocumentCatalogue;
            }else {
                //未满足筛选条件直接返回空数据
                return null;
            }
        }else {
            //不存在子集时判断当前对象是否满足筛选条件,也就是是否满足有CRUD操作的数据
            if (idList.contains(id)){
                return DocumentCatalogue;
            }else {
                return null;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值