问题描述:
应用场景和需求:对一个树状结构的数据,进行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;
}
}
}