Java 将元数据映射与对象进行比较的最佳实践?

Java 将元数据映射与对象进行比较的最佳实践?,java,Java,我有元数据和表达式类的映射: Map<String , Object> metaDate; public class Expression{ private List<UserCondition> conditions; private LogicalOperationEnum; // and , or getters/stters... } public classUserCondition{ private String fieldNa

我有元数据和表达式类的映射:

Map<String , Object> metaDate;

public class Expression{
   private List<UserCondition> conditions;
   private LogicalOperationEnum;   // and , or
   getters/stters...
}

public classUserCondition{
   private String fieldName;
   private MathOperationEnum operation;   // > , < , >=  , <= , =
   private Object value;
   getters/setters...
}
Map元日期;
公共类表达式{
私人名单条件;
私有LogicalOperationEnum;//和,或
吸气剂/支架。。。
}
公共类用户条件{
私有字符串字段名;
私有MathOperationEnum操作;//>,<,>=,0){
返回false;
}else if(c.getOperation().getName()==“>=”&&String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())<0){
返回false;
}否则{
返回true;
}
}
}else if(expression.getLogicalOperation()==LogicalOperationEnum.or){
for(UserCondition c:expression.getConditions()){
如果(c.getOperation().getName()==“>”&&String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue()))>0){
返回true;

}else if(c.getOperation().getName()=="我怀疑您是否想将字符串与
==
进行比较。您还希望
返回true;
上方的行上,如果
否则,如果
。在“and”操作中,如果其中一个条件为false,则所有条件都为false;在“or”操作中,如果其中一个条件为true,则所有条件都为true。是的,但您的代码a你写的不能在
的情况下返回
true
。我编辑了它,现在是正确的??不,不是。你应该把
返回true;
放在我在第一条评论中指定的位置。
private boolean evaluate(Map<String, Object> userMetaData, Expression expression) {
    if (expression.getLogicalOperation() == LogicalOperationEnum.and) {
        for (UserCondition c : expression.getConditions()) {
            if (c.getOperation().getName() == ">" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) <= 0) {
                return false;
            } else if (c.getOperation().getName() == "<" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) >= 0) {
                return false;
            } else if (c.getOperation().getName() == "<=" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) > 0) {
                return false;
            } else if (c.getOperation().getName() == ">=" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) < 0) {
                return false;
            } else{
                return true;
            }
        }
    } else if (expression.getLogicalOperation() == LogicalOperationEnum.or) {
        for (UserCondition c : expression.getConditions()) {
            if (c.getOperation().getName() == ">" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) > 0) {
                return true;
            } else if (c.getOperation().getName() == "<" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) < 0) {
                return true;
            } else if (c.getOperation().getName() == "<=" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) <= 0) {
                return true;
            } else if (c.getOperation().getName() == ">=" && String.valueOf(userMetaData.get(c.getField())).compareTo(String.valueOf(c.getValue())) >= 0) {
                return true;
            }
        }
    }
    return false;
}