引入依赖
<dependency>
<groupId>org.noear</groupId>
<artifactId>liquor-eval</artifactId>
<version>1.2.7</version>
</dependency>
liquor 表达式引擎(ExpressionEvaluator)支持 java 所有的类型、及所有语法(比如泛型,lambda 表达式)。因为,它是基于 java 动态编译器及缓存构建的。
零依赖,包大小约为 36 KB。
实例化表达式引擎(全局可复用,线程安全)
ExpressionEvaluator evaluator = new ExpressionEvaluator();
常量表达式计算演示
// 数学运算 (Long)
String exp1 = "1+2+3";
Integer result = (Integer) evaluator.eval(exp1);
System.out.println(result); // 6
// 数学运算 (Double)
String exp4 = "1.1+2.2+3.3";
Double result2 = (Double) evaluator.eval(exp4);
System.out.println(result2); // 6.6
// 包含关系运算和逻辑运算
String exp2 = "(1>0||0<1)&&1!=0";
System.out.println(evaluator.eval(exp2)); // true
// 三元运算
String exp3 = "4 > 3 ? \"4 > 3\" : 999";
System.out.println(evaluator.eval(exp3)); // 4 > 3
变量表达式计算演示
Map<String, Object> bindings = new HashMap<>();
bindings.put("a", 1);
bindings.put("b", 2);
evaluator.eval("(a + b) * 2", bindings);
函数库调用演示
不支持自定义函数,但可以使用整个 JDK 里的类,及自己定义类。
CodeSpec exp5 = new CodeSpec("Math.min(1,2)").imports(Math.class);
System.out.println(evaluator.eval(exp5));