对于目录树,多条件筛选匹配,删除不符合的分支

该代码实现了一种针对树结构数据的过滤方法,逐层检查节点。在前两层基于标题和内容进行匹配,不符则移除。最后一层需同时满足四个条件:内容包含、设置状态、主责任人ID存在与否以及不在指定列表内,否则删除对应分支。
摘要由CSDN通过智能技术生成

需求:

对一棵树多条件匹配,前面层次仅仅匹配二个条件,不符合删除,最后一层匹配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);
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值