Aviator的实现思路与其他轻量级的求值器很不相同, 其他求值器一般都是通过解释的方式运行, 而Aviator则是直接将表达式编译成Java 字节码, 交给JVM去执行。简单来说, Aviator的定位是介于Groovy这样的重量级脚本语言和IKExpression这样的轻量级表达式引擎 之间。
Aviator支持大部分运算操作符, 包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式(?:), 并且支持操作符的优先级和括号强制优先级, 具体请看后面的操作符列表, 支持自定义函数。
添加依赖
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>2.3.3</version>
</dependency>
使用
//设置参数
Map<String, Object> params = new HashMap<>();
params.put("price", order.getTotalPrice());
params.put("status", status);
params.put("agentLevel",agentLevel);
params.put("year",year);
//计算公式
String formula = "agentLevel==03 ? (price*(status==3 ? 0.05 : (year<=1 ? 0.4 : year>1&&year<=2 ? 0.3 : year>2&&year<=3 ? 0.2 : 0.05))) : agentLevel==02 ? (price*(status==3 ? 0.05 : (year<=1 ? 0.3 : year>1&&year<=2 ? 0.2 : year>2&&year<=3 ? 0.1 : 0.05))) : (price*(status==3 ? 0.05 : (year<=1 ? 0.2 : year>1&&year<=2 ? 0.1 : year>2&&year<=3 ? 0.05 : 0.05)))";
//结果
String res = AviatorEvaluator.compile(formula, true).execute(params);
更多使用方式请参考官方API文档。