本需求为控制第一目录到深度一即可,第二层到深度2,第三,第四与第五层到深度3。
树的实体类为:
@Data
public class ICEDEvidenceDocumentTreeVO {
/**
* 标题id(层级,1.2.3.4.5)
*/
private String titleId;
/**
* 标题名称
*/
private String titleName;
/**
* 父节点id
*/
private Integer parentId;
/**
* 子节点
*/
private List<ICEDEvidenceDocumentTreeVO> children;
}
使用也就是调用一个工具类:
TreePruningUtils.pruning(children, new ICEDEvidenceDocumentTreePruningDTO(1, 2, 3, 3, 3));
后面便是控制到各层到达的深度
@Data
public class ICEDEvidenceDocumentTreePruningDTO {
/**
* 第一章到达几级标题
*/
private Integer chapter1;
/**
* 第二章到达几级标题
*/
private Integer chapter2;
private Integer chapter3;
private Integer chapter4;
private Integer chapter5;
public ICEDEvidenceDocumentTreePruningDTO(Integer chapter1, Integer chapter2, Integer chapter3, Integer chapter4, Integer chapter5) {
this.chapter1 = chapter1;
this.chapter2 = chapter2;
this.chapter3 = chapter3;
this.chapter4 = chapter4;
this.chapter5 = chapter5;
}
}
工具类
import java.util.List;
public class TreePruningUtils {
/**
* 剪枝
*/
public static void pruning(List<ICEDEvidenceDocumentTreeVO> tree, ICEDEvidenceDocumentTreePruningDTO treePruningDTO){
for (ICEDEvidenceDocumentTreeVO treeVO : tree) {
switch (treeVO.getTitleId()){
case 1:
if (treePruningDTO.getChapter1() == null){
continue;
}else {
doPruning(treeVO, treePruningDTO.getChapter1(),1);
}
break;
case 2:
if (treePruningDTO.getChapter2() == null){
continue;
} else {
doPruning(treeVO, treePruningDTO.getChapter2(), 1);
}
break;
case 3:
if (treePruningDTO.getChapter3() == null) {
continue;
} else {
doPruning(treeVO, treePruningDTO.getChapter3(), 1);
}
break;
case 4:
if (treePruningDTO.getChapter4() == null) {
continue;
} else {
doPruning(treeVO, treePruningDTO.getChapter4(), 1);
}
break;
case 5:
if (treePruningDTO.getChapter5() == null) {
continue;
} else {
doPruning(treeVO, treePruningDTO.getChapter5(), 1);
}
break;
}
}
}
private static void doPruning(ICEDEvidenceDocumentTreeVO treeVO, Integer maxDepth, Integer currentDepth){
if (currentDepth >= maxDepth){
treeVO.setChildren(null);
}
if (treeVO.getChildren() == null) {
return;
}
for (ICEDEvidenceDocumentTreeVO child : treeVO.getChildren()) {
doPruning(child, maxDepth, currentDepth + 1);
}
}
}