需求:
对一棵树多条件匹配,前面层次仅仅匹配二个条件,不符合删除,最后一层匹配4个条件,不符合删除对应分支。
//评定状态
private boolean checkState(NodeDTO nodeDTO, String content, List<Integer> list,GhaDaAssignmentDTO ghaDaAssignmentDTO) {
if (nodeDTO != null) {
List<NodeDTO> children = nodeDTO.getChildren();
if (children != null && children.size() != 0) {
Iterator<NodeDTO> iterator = children.iterator();
while (iterator.hasNext()) {
NodeDTO next = iterator.next();
//不是最后一层
//匹配标题和内容
int abc = manage.patternOneTwo(content, nodeDTO);
if (abc == 1){
continue;
}
boolean match = checkState(next, content,list,ghaDaAssignmentDTO);
if (match) {
ghaDaAssignmentDTO.setValue(2);
iterator.remove();
}
}
} else {
//最后一层, 匹配所有
if (StringUtils.isNotBlank(content) && !nodeDTO.getNodeCode().contains(content) && !nodeDTO.getNodeName().contains(content)){
return true;
}
// if (StringUtils.isNotNull(isSetting) && isSetting == 0 && StringUtils.isNotNull(nodeDTO.getPrincipalId())){
// return true;
// }else if(StringUtils.isNotNull(isSetting) && isSetting == 1 && !StringUtils.isNotNull(nodeDTO.getPrincipalId())){
// return true;
// }
if (list != null && list.size() != 0 && !list.contains(nodeDTO.getPrincipalId())){
return true;
}else if (list != null && list.size() == 0){
return true;
}
}
}
return false;
}
//匹配一二层
public int patternOneTwo(String content,NodeDTO nodeDTO1){
int i =0;
//判断第一层
if (StringUtils.isNotBlank(content)){
//判断标题和指标内容
if (nodeDTO1.getNodeCode().contains(content) || nodeDTO1.getNodeName().contains(content)){
i = 1;
}
}else {
//不相等或无匹配,递归后面的
i =0;
}
return i;
}
23-1-29;bug处理
这种遍历删除只能删除所有分支最后一层的判断,如果需要对所有分支所有层级匹配效验,需要当发送匹配成功删除时,再次全局遍历匹配一次,需要在外层再套一个遍历方法。
//删除循环删除
public void checkStateS(NodeDTO nodeDTO, String content, List<Integer> list){
GhaDaAssignmentDTO ghaDaAssignmentDTO = new GhaDaAssignmentDTO();
checkState(nodeDTO, content,list,ghaDaAssignmentDTO);
if (ghaDaAssignmentDTO.getValue() != null) {
if (ghaDaAssignmentDTO.getValue().equals(2)) {
checkStateS(nodeDTO, content,list);
}
}
}