aviator 自定义表达式
引入依赖
如果你使用的是 Maven 项目,在 pom.xml
中添加以下依赖:
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.3.2</version>
</dependency>
基本表达式求值
import com.googlecode.aviator.AviatorEvaluator;
public class BasicExpressionExample {
public static void main(String[] args) {
// 定义一个简单的数学表达式
String expression = "2 + 3 * 4";
// 执行表达式求值
Object result = AviatorEvaluator.execute(expression);
System.out.println("表达式 " + expression + " 的计算结果是: " + result);
}
}
自定义函数类
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.function.FunctionUtils;
import com.googlecode.aviator.runtime.type.AviatorBoolean;
import com.googlecode.aviator.runtime.type.AviatorDouble;
import com.googlecode.aviator.runtime.type.AviatorObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 自定义函数类
class AddFunction extends AbstractFunction {
@Override
public String getName() {
return "strIn";
}
@Override
public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {
String city = FunctionUtils.getStringValue(arg1, env);
String cityListJson = FunctionUtils.getStringValue(arg2, env);
List<String> cityList = JSON.parseObject(cityListJson, List.class);
boolean flag = cityList.contains(city);
return AviatorBoolean.valueOf(flag);
}
}
public class CustomFunctionExample {
public static void main(String[] args) {
// 注册自定义函数
AviatorEvaluator.addFunction(new AddFunction());
// 定义一个调用自定义函数的表达式
String expression = "strIn(x, y)";
List<String> cityList = Lists.newArrayList("四川", "成都", "郑州");
// 创建一个 Map 用于存储变量的值
Map<String, Object> env = new HashMap<>();
env.put("x", "郑州");
env.put("y", JSON.toJSONString(cityList));
// 执行表达式求值,并传入变量环境
Object result = AviatorEvaluator.execute(expression, env);
System.out.println("表达式 " + expression + " 的计算结果是: " + result);
}
}