问题描述:
应用场景和需求:对一个树状结构的数据,进行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){//作为筛选条件的判断值,也就是拿到 当前子集的idString 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;}}}