介绍

Aviator是一个轻量级、高性能的Java表达式执行引擎,它动态地将表达式编译成字节码并运行。可被用于动态的公式计算、规则执行和过滤等场景

jar 包依赖

<dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>4.2.0</version>
</dependency>

牛刀小试

案例1

public class AnswerApp {public static void main(String[] args) throws Exception {// 表达式String express = "x*x+y*y";Expression expression = AviatorEvaluator.compile(express);// 表达式中 x的值设置为 10, y的值设置为5Map<String, Object> params = ImmutableMap.of("x", 10, "y", 5);Object result = expression.execute(params);System.out.println("result: "+ result);}
}

程序运行结果

result: 125

案例2

public class AnswerApp {public static void main(String[] args) throws Exception {Long result = (Long) AviatorEvaluator.execute("10 * 10 + 5 * 5");System.out.println("result: " + result);System.out.println();String name = "Answer.AI.L";String language = "Java";Map<String, Object> map = ImmutableMap.of("myProp1", name, "myProp2", language);Object result1 = AviatorEvaluator.execute("'Hello ' + myProp1 + ', Hello ' + myProp2", map);System.out.println("result1: " + result1);}
}

程序运行结果

result: 125result1: Hello Answer.AI.L, Hello Java

案例3-内置函数

public class AnswerApp {public static void main(String[] args) throws Exception {// nsSystem.out.println(AviatorEvaluator.execute("string.substring('AnswerAIL',1,3)"));// trueSystem.out.println(AviatorEvaluator.execute("string.contains(\"AnswerAIL\",\"AI\")"));// trueSystem.out.println(AviatorEvaluator.execute("string.contains(\"Answer\",string.substring('AnswerAIL',1,3))"));// 求n次方  AviatorEvaluator.execute("math.pow(-3,2)");   // 开平方根  AviatorEvaluator.execute("math.sqrt(14.0)"); // 正弦函数    AviatorEvaluator.execute("math.sin(20)");    }
}

案例4-自定义函数

public class MySumFunction extends AbstractFunction {@Overridepublic AviatorObject call(Map<String, Object> env, AviatorObject a, AviatorObject b, AviatorObject c) {Number numA = FunctionUtils.getNumberValue(a, env);Number numB = FunctionUtils.getNumberValue(b, env);Number numC = FunctionUtils.getNumberValue(c, env);long result = numA.longValue() + numB.longValue() + numC.longValue();
//        return new AviatorDouble(numA.longValue() + numB.longValue() + numC.longValue());return AviatorLong.valueOf(result);}/*** 获取函数名* */@Overridepublic String getName() {return "mySum";}
}public class AnswerApp {public static void main(String[] args) throws Exception {// 注册函数AviatorEvaluator.addFunction(new MySumFunction());String expression = "mySum(x, y, z)";Map<String, Object> params = ImmutableMap.of("x", 1, "y", 2, "z", 3);long result = (long) AviatorEvaluator.execute(expression, params);System.out.printf("result : " + result);}
}

程序运行结果

result : 6

Reference

  • Aviator 表达式的使用
  • aviator jar 包
  • Aviator 表达式求值引擎开源框架

基于google aviator的表达式引擎相关推荐

  1. java 表达式引擎,Aviator 轻量级表达式引擎

    Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值. Aviator的特性 支持大部分运算操作符,包括算术操作符.关系运算符.逻辑操作符.位运算符.正则 ...

  2. 使用Aviator达式引擎处理表达式判断

    Aviator是一个高性能.轻量级的基于java实现的表达式引擎,它动态地将String类型的表达式编译成Java ByteCode并交给JVM执行. Aviator支持所有的关系运算符和算术运算符, ...

  3. JsonPath 搭配 Aviator 表达式引擎使用案例

    导语 推荐读者阅读较为官方的Aviator说明文档,本文是笔者使用过程中的笔记小结,知识可能比较零散和片面,敬请谅解 jsonpath 推荐官方文档:https://gitee.com/mirrors ...

  4. 【Aviator】(一)初识 表达式引擎

    推荐一个不错的AI教程: https://www.captainbed.net/blog-vincent/ 一.关于"表达式引擎" 1."表达式语言"(Expr ...

  5. 表达式引擎aviator

    转自:https://blog.csdn.net/keda8997110/article/details/50782848 简介 Aviator是一个高性能.轻量级的 java 语言实现的表达式求值引 ...

  6. Aviator(表达式执行引擎)发布1.0.1

    Aviator是一个表达式执行引擎,最近由于工作上的原因,又将这个东西扩充了一下,加入了静态的编译优化和seq库. 对于类似"1+2″这样由常量组成的表达式,会在编译的时候直接计算出结果而非 ...

  7. aviator教程-表达式执行引擎

    转载自:https://blog.csdn.net/u011870280/article/details/80400959 github:https://github.com/killme2008/a ...

  8. Java表达式引擎Aviator

    java表达式引擎有很多,最后选择了Aviator.原因是:高性能.轻量级. Aviator 是将表达式直接翻译成对应的 java 字节码执行,除了依赖 commons-beanutils 这个库之外 ...

  9. 流行的表达式引擎简单分析对比

    序        最近来了个能耗监测的需求,也就是对设备上报数据做一些业务的计算后阈值预警风控类的.对需求进行抽丝剥茧的拆解后,发现除去业务,最难的点也就是阈值比较了,到此有经验的码农很容易就想到了表 ...

最新文章

  1. 验证码识别技术(1) - 边缘检测
  2. linux入门级知识回顾
  3. IOS7开发~API变化
  4. JAVA中this和super用法
  5. 运用神经网络方法找寻集成学习中的最优权重
  6. JAVA Feign
  7. oracle logfile sync,oracle等待事件3构造一个DirectPathwrite等待事件和构造一个LogFileSync等待事件...
  8. 在Zephyr RTOS上实现一个轮询系统
  9. Kotlin与Android能做什么?答:Android开发优先语言
  10. Vs2010 上的配置Opencv2.2
  11. php怎样截取图片部分,PHP截取指定图片大小的方法
  12. html5版微博qq登录,QQ和新浪微博登陆第三方的简单实现
  13. opencv鼠标事件和滑条操作
  14. Laravel执行定时任务
  15. 使用Vue实现todos(Vue CLI和VueX)
  16. dsf5.0修改不了头像
  17. [PYTHON]Scons工具简介
  18. 大端模式和小端模式是什么意思?
  19. wpf TextBox日志文本框
  20. android微信个人界面设计,安卓版微信主界面的再设计

热门文章

  1. 易语言学习第3天。登录窗口。
  2. 怎么用python自带的idle来打开py文件
  3. slf4j log4j 和 reload4j
  4. html语言单词背不下来,英语单词总是背不下来,怎么办?
  5. 智能测温工作台、健康打卡、智能助手、防疫测温、体温监控、组织架构、模板监控、设备管理、组织架构、设备数据、设备监控、应用管理、企业管理、目标管理、文档说明、业务流程图、账号、权限、发票、axure
  6. PICT:一款功能强大的信息收集和事件响应工具
  7. 炼厂322℃工艺气余热换热器设计
  8. 2021高考江门成绩查询,2021江门中考成绩查询时间及入口
  9. How to Make An Uimage(In YOCTO,RDK)?
  10. python的判断语句练习