• 指令数据采集(四)--指令的条件处理


    例如条件:(A=B)&&(B>C)

    条件使用的是条件组的概念,单独的条件也是一个条件组例如,A和B是条件关联,B和C也是条件关联,(A=B)和(B>C)是组关联,那么我建的对象如下

      1 public class GroupCondition implements Cloneable{
      2 
      3     //star 左边所有的判断
      4     /**
      5      * A左边的属性判断
      6      */
      7     private Param paramA;
      8     /**
      9      * 放入的条件判断 属性和属性的条件判断
     10      */
     11     private IConditionOperation iConditionOperation;
     12     /**
     13      * B右边的属性判断
     14      */
     15     private Param paramB;
     16     //end 右边所有的判断
     17     /**
     18      * 组的判断条件
     19      */
     20     private IConditionOperation iConditionOperationGroup;
     21 
     22     /**
     23      * 组
     24      */
     25     private GroupCondition groupCondition;
     26 
     27 
     28     public GroupCondition(){}
     29     /**
     30      * 实例化一个组 只包含了 一个组的基本条件
     31      * @param paramA
     32      * @param iConditionOperation
     33      * @param paramB
     34      */
     35     public GroupCondition(Param paramA, IConditionOperation iConditionOperation, Param paramB) {
     36         this.paramA = paramA;
     37         this.iConditionOperation = iConditionOperation;
     38         this.paramB = paramB;
     39     }
     40 
     41     /**
     42      * 实例化一个完全的组 包含了三个基本条件和一个租
     43      * @param paramA
     44      * @param iConditionOperation
     45      * @param paramB
     46      * @param iConditionOperationGroup
     47      * @param groupCondition
     48      */
     49     public GroupCondition(Param paramA,
     50                           IConditionOperation iConditionOperation,
     51                           Param paramB,
     52                           IConditionOperation iConditionOperationGroup,
     53                           GroupCondition groupCondition) {
     54         this.paramA = paramA;
     55         this.iConditionOperation = iConditionOperation;
     56         this.paramB = paramB;
     57         this.iConditionOperationGroup = iConditionOperationGroup;
     58         this.groupCondition = groupCondition;
     59     }
     60 
     61     /**
     62      * 实例化两个租
     63      * @param groupConditionA
     64      * @param iConditionOperationGroup
     65      * @param groupConditionB
     66      */
     67     public GroupCondition(GroupCondition groupConditionA,
     68                           IConditionOperation iConditionOperationGroup,
     69                           GroupCondition groupConditionB) {
     70 
     71         this.paramA = groupConditionA.getParamA();
     72         this.paramB = groupConditionA.getParamB();
     73         this.iConditionOperationGroup = iConditionOperationGroup;
     74         this.groupCondition = groupConditionB;
     75     }
     76 
     77     public Param getParamA() {
     78         return paramA;
     79     }
     80 
     81     public void setParamA(Param paramA) {
     82         this.paramA = paramA;
     83     }
     84 
     85     public IConditionOperation getiConditionOperation() {
     86         return iConditionOperation;
     87     }
     88 
     89     public void setiConditionOperation(IConditionOperation iConditionOperation) {
     90         this.iConditionOperation = iConditionOperation;
     91     }
     92 
     93     public Param getParamB() {
     94         return paramB;
     95     }
     96 
     97     public void setParamB(Param paramB) {
     98         this.paramB = paramB;
     99     }
    100 
    101     public IConditionOperation getiConditionOperationGroup() {
    102         return iConditionOperationGroup;
    103     }
    104 
    105     public void setiConditionOperationGroup(IConditionOperation iConditionOperationGroup) {
    106         this.iConditionOperationGroup = iConditionOperationGroup;
    107     }
    108 
    109     public GroupCondition getGroupCondition() {
    110         return groupCondition;
    111     }
    112 
    113     public void setGroupCondition(GroupCondition groupCondition) {
    114         this.groupCondition = groupCondition;
    115     }
    116 
    117     @Override
    118     protected GroupCondition clone() throws CloneNotSupportedException {
    119         GroupCondition groupCondition = new GroupCondition();
    120         if(this.getParamA()!=null){
    121             groupCondition.setParamA(groupCondition.getParamA().clone());
    122         }
    123         if(this.getParamB()!=null){
    124             groupCondition.setParamB(groupCondition.getParamB().clone());
    125         }
    126         if(this.getiConditionOperation()!=null){
    127             groupCondition.setiConditionOperation(this.getiConditionOperation());
    128         }
    129         if(this.getiConditionOperationGroup()!=null){
    130             groupCondition.setiConditionOperation(this.getiConditionOperationGroup());
    131         }
    132         if(this.getGroupCondition()!=null){
    133             groupCondition.setGroupCondition(this.getGroupCondition().clone());
    134         }
    135         return groupCondition;
    136     }
    137 }
    View Code

    代码解析

    1.使用递归的关系进行实现条件A作为paramA,条件B作为paramB,中间的接口iConditionOperation来进行条件判断

    条件判断的代码

    1.接口

     1 public interface IConditionOperation {
     2 
     3     /**
     4      * 组比较的成员
     5      * @param paramA
     6      * @param paramB
     7      * @return
     8      */
     9     boolean operation(Param paramA,Param paramB);
    10 
    11     /**
    12      * 组关系和组关系之间的逻辑判断
    13      * @param flagA
    14      * @param flagB
    15      * @return
    16      */
    17     boolean operationLogic(boolean flagA,boolean flagB);
    18 }
    View Code

    分成两个,组内比较,和组和组之间比较实现,组和组之间的条件判断就是and或者or进行条件判断

     1 public class AndIConditionOperationImpl implements IConditionOperation {
     2     protected AndIConditionOperationImpl(){}
     3     /**
     4      *
     5      * @param paramA
     6      * @param paramB
     7      * @return
     8      */
     9     @Override
    10     public boolean operation(Param paramA, Param paramB) {
    11         ParamValue paramValueA = paramA.getParamValue();
    12         ParamValue paramValueB = paramB.getParamValue();
    13         if (paramValueA != null && paramValueB != null) {
    14             if (StringUtils.isNotBlank(paramValueA.getValue())
    15                     && StringUtils.isNotBlank(paramValueB.getValue())){
    16                 /**
    17                  * 判断相等的时候 进行返回为true
    18                  */
    19                 if(paramValueA.getValue().equals(paramValueB.getValue())){
    20                     return true;
    21                 }else {
    22                     return false;
    23                 }
    24             }else {
    25                 return false;
    26             }
    27         } else {
    28             return false;
    29         }
    30     }
    31 
    32     /**
    33      * 组关系和组关系之间的逻辑判断
    34      * true and true = true
    35      * false and false = false
    36      * true and false = false
    37      * false and true = false
    38      * @param flagA
    39      * @param flagB
    40      * @return
    41      */
    42     @Override
    43     public boolean operationLogic(boolean flagA, boolean flagB) {
    44         if(flagA==true&&flagB==true){
    45             return true;
    46         }else {
    47             return false;
    48         }
    49     }
    50 }
    View Code
     1 public class OrIConditionOperationImpl implements IConditionOperation {
     2     protected OrIConditionOperationImpl(){}
     3     /**
     4      *
     5      * @param paramA
     6      * @param paramB
     7      * @return
     8      */
     9     @Override
    10     public boolean operation(Param paramA, Param paramB) {
    11         ParamValue paramValueA = paramA.getParamValue();
    12         ParamValue paramValueB = paramB.getParamValue();
    13         if (paramValueA != null && paramValueB != null) {
    14             if (StringUtils.isNotBlank(paramValueA.getValue())
    15                     && StringUtils.isNotBlank(paramValueB.getValue())){
    16                 /**
    17                  * 判断相等的时候 进行返回为true
    18                  * 或的返回都是true
    19                  */
    20                 if(paramValueA.getValue().equals(paramValueB.getValue())){
    21                     return true;
    22                 }else {
    23                     return true;
    24                 }
    25             }else {
    26                 return false;
    27             }
    28         } else {
    29             return false;
    30         }
    31     }
    32 
    33     /**
    34      * 组关系和组关系之间的逻辑判断
    35      * true or true = true
    36      * true or false= true
    37      * false or true = true
    38      * false or false = false
    39      * @param flagA
    40      * @param flagB
    41      * @return
    42      */
    43     @Override
    44     public boolean operationLogic(boolean flagA, boolean flagB) {
    45         if(flagA==false&&flagB==false){
    46             return false;
    47         }else {
    48             return true;
    49         }
    50     }
    51 }
    View Code

    2.=的实现和>的实现

     1 public class EQIConditionOperationImpl implements IConditionOperation {
     2     protected EQIConditionOperationImpl(){}
     3     /**
     4      *
     5      * @param paramA
     6      * @param paramB
     7      * @return
     8      */
     9     @Override
    10     public boolean operation(Param paramA, Param paramB) {
    11         ParamValue paramValueA = paramA.getParamValue();
    12         ParamValue paramValueB = paramB.getParamValue();
    13         if (paramValueA != null && paramValueB != null) {
    14             if (StringUtils.isNotBlank(paramValueA.getValue())
    15                     && StringUtils.isNotBlank(paramValueB.getValue())){
    16                 /**
    17                  * 判断相等的时候 进行返回为true
    18                  */
    19                 if(paramValueA.getValue().equals(paramValueB.getValue())){
    20                     return true;
    21                 }else {
    22                     return false;
    23                 }
    24             }else {
    25                 return false;
    26             }
    27         } else {
    28             return false;
    29         }
    30     }
    31 
    32     /**
    33      * 组关系和组关系之间的逻辑判断
    34      *
    35      * @param flagA
    36      * @param flagB
    37      * @return
    38      */
    39     @Override
    40     public boolean operationLogic(boolean flagA, boolean flagB) {
    41         return true;
    42     }
    43 }
    View Code
     1 public class GTIConditionOperationImpl implements IConditionOperation {
     2     protected GTIConditionOperationImpl(){}
     3     /**
     4      * @param paramA
     5      * @param paramB
     6      * @return
     7      */
     8     @Override
     9     public boolean operation(Param paramA, Param paramB) {
    10         ParamValue paramValueA = paramA.getParamValue();
    11         ParamValue paramValueB = paramB.getParamValue();
    12         try {
    13             if (paramValueA != null && paramValueB != null) {
    14                 if (StringUtils.isNotBlank(paramValueA.getValue())
    15                         && StringUtils.isNotBlank(paramValueB.getValue())) {
    16                     /**
    17                      * 判断
    18                      */
    19                     Long paramLongA = Long.valueOf(paramValueA.getValue());
    20                     Long paramLongB = Long.valueOf(paramValueB.getValue());
    21                     if (paramLongA > paramLongB) {
    22                         return true;
    23                     } else {
    24                         return false;
    25                     }
    26                 } else {
    27                     return false;
    28                 }
    29             } else {
    30                 return false;
    31             }
    32         } catch (NumberFormatException numberFormatExcepiotn) {
    33             throw new ConditionParamTransException("参数转换成数值异常");
    34         }
    35     }
    36 
    37     /**
    38      * 组关系和组关系之间的逻辑判断
    39      *
    40      * @param flagA
    41      * @param flagB
    42      * @return
    43      */
    44     @Override
    45     public boolean operationLogic(boolean flagA, boolean flagB) {
    46         return false;
    47     }
    48 }
    View Code

    < ,<=,>,>=为数值判断,=使用进行值equlase进行判断。

  • 相关阅读:
    广义后缀自动机模板
    HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )
    BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )
    WHU 583 Palindrome ( 回文自动机 && 本质不同的回文串的个数 )
    HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
    HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
    HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )
    HDU 5734 Acperience ( 数学公式推导、一元二次方程 )
    hihocoder 1251 Today is a rainy day ( 15年北京 C、暴力 )
    HDU 5113 Black And White ( 2014 北京区预赛 B 、搜索 + 剪枝 )
  • 原文地址:https://www.cnblogs.com/binarysheep/p/7428843.html
Copyright © 2020-2023  润新知