如何将字符串逻辑表达式转换为java可执行表达式

如何将字符串逻辑表达式转换为java可执行表达式,java,parsing,Java,Parsing,不幸的是,这有点难看。我用一种格式编写了一个字符串,作为约束发送到数据库。它看起来像这样: String constraint = "((attr1 eq 1) OR (attr2 eq 5)) AND (attr3 BETWEEN (1, 5))" 我需要一种将其解析为流过滤器的方法,如下所示: stream.filter(obj -> (obj.getAttr1() == 1 || obj.getAttr2() == 5) && (isBetween(obj

不幸的是,这有点难看。我用一种格式编写了一个字符串,作为约束发送到数据库。它看起来像这样:

String constraint = "((attr1 eq 1) OR (attr2 eq 5)) AND (attr3 BETWEEN (1, 5))"
我需要一种将其解析为流过滤器的方法,如下所示:

stream.filter(obj -> 
    (obj.getAttr1() == 1 || obj.getAttr2() == 5) && (isBetween(obj.getAttr3(), 1, 5)))
isBetween方法位于其他位置,用于确定attr3值是否介于1和5之间。有没有一种简单的解析方法

有多个过滤器调用应该是好的,而不是将其全部装配到一个过滤器调用中。可以在if语句中按照以下行决定使用哪个getAttr:

if (attr.equals("attr1")) {
    obj.getAttr1();
}
你可能想调查一下。它是一个通用的表达式解析器和求值器

您可以定义自己的运算符,因此“eq”、“and”和“or”不应该是问题。您可以创建变量,因此“attr1”和朋友也不应该成为问题

这可能就是问题所在:

attr3 BETWEEN (1, 5)
不确定是否可以定义一个在右侧接受多个参数的运算符,或者定义一个返回后缀运算符的函数。但是源代码是可用的,所以也许你可以在里面破解一个