首页 新闻 会员 周边

java有没有支持in的动态表达式类库

0
悬赏园豆:10 [已关闭问题] 关闭于 2023-09-15 19:03

go 有一个https://github.com/antonmedv/expr,java 连一个都没有能够支持in的吗?支持这种解析的string str="(( id in ['101']) && (policy == 'pp' && account_id != ''))"

xiaoyon的主页 xiaoyon | 初学一级 | 园豆:195
提问于:2023-09-15 14:45
< >
分享
所有回答(2)
0

Java中没有内置的动态表达式库,但可以使用一些第三方库来实现支持in的动态表达式。一种常用的库是Spring Expression Language(SpEL),它可以在运行时解析和评估表达式。

使用SpEL,可以使用in操作符来检查一个表达式是否在一个集合中。示例代码片段:

import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;

public class Main {
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();

Expression expression = parser.parseExpression("'foo' in {'foo', 'bar'}");
boolean result = expression.getValue(Boolean.class);
System.out.println(result); // 输出 true

expression = parser.parseExpression("'baz' in {'foo', 'bar'}");
result = expression.getValue(Boolean.class);
System.out.println(result); // 输出 false
}
}
使用SpEL可以实现更复杂的表达式,支持访问对象的属性和方法等。可以参考Spring官方文档了解更多关于SpEL的用法

码一码ba | 园豆:152 (初学一级) | 2023-09-15 18:12

多谢回答!因为我字符串的变量都是动态的,是需要赋值的。不是直接就是写死的,比如你的"'foo' in {'foo', 'bar'}" ,foo是需要我从json中 转换为key,获取value给赋值的,比如 foo是 1123.这样最后的字符串就是 "'1123' in {'foo', 'bar'}" 。spel没有赋值的地方。比如用Groovy:
String str = "(transaction_channel_id in ['101','115','100101117','100101342','100101335','100101336']) && (policy == 'USER_FINAN_EVENT' && account_id != '')";
Binding engine = new Binding();
GroovyShell shell = new GroovyShell(engine);
engine.setVariable("transaction_channel_id", "100101117");
engine.setVariable("policy", "USER_FINAN_EVENT");
engine.setVariable("account_id", "USER_FINAN_EVENT");

支持(0) 反对(0) xiaoyon | 园豆:195 (初学一级) | 2023-09-15 19:11
0

groovy可以,但是一个表达式需要200ms,远远不及go

xiaoyon | 园豆:195 (初学一级) | 2023-09-15 19:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册