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;
}