QLExpress:GitHub - alibaba/QLExpress: QLExpress is a powerful, lightweight, dynamic language for the Java platform aimed at improving developers’ productivity in different business scenes.

public static void main(String[] args) {// 统计时,会传递日期和数据板块id,数据板块id的用处就是获取计算公式// 假如这就是我们获取到的某一个数据板块的公式String str = "avg(item_code_f,item_code_b) +item_code_a ÷ item_code_k - 100";// 处理一下÷和×,毕竟是以*和/作为乘法除法符号的str = str.replace("÷","/");str = str.replace("×","*");// 定义一个正则表达式,过滤掉计算符号String regex = "[()*+/-]";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);List<String> list = new ArrayList<>();// 这里注意要先转成Set然后再转成List,因为有可能计算的时候要使用一个数据项的值多次,但是其实都是同一个值list.addAll(Arrays.asList(m.replaceAll(" ").split(" ")).stream().filter(s->{// 通过流来单独过滤avg和数字return !s.equals("avg")&&!s.equals("")&&!isNumeric(s);}).collect(Collectors.toSet()));// 输出一下结果:[item_code_f,item_code_b,item_code_a,item_code_k],这样就成功的将数据项编码给分离出来System.out.println(list.toString());// 然后通过数据项编码可以把对应的统计日期下,对应的数据项编码的数量或者金额获取到,然后通过replace()方法替换调即可// 具体从数据库里取值和替换的代码省略。。。嘿嘿,偷个懒 >_<||| // 最后得到大概这样的数据:avg(1000,2000)+30/2-100String express = "avg(1000,2000)+30/2-100";// 接下来就是使用QLExpress了ExpressRunner runner = new ExpressRunner();// 先定义我们需要的avg函数runner.addFunction("avg",new Operator(){@Overridepublic Object executeInner(Object[] objArray) throw Exception{Double total=0.0;Double average=0.0;for(Double obj: objArray){Double num=Double.valueOf(obj.toString());total = total + num;}average = total/objArray.length;return average;}});// 计算结果,这里是一个重载方法,没有logObject result = runner.execute(express,null, null, false,false);// 顺利拿到结果:1415Double resultNum = Double.valueOf(result.toString());
}/*** 判断是否是数字*/
public static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]*");Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false;}return true;
}

使用QLExpress动态制定计算公式_佛祖保佑永不宕机的博客-CSDN博客_qlexpress表达式

QLExpress-阿里规则引擎相关推荐

  1. 阿里开源规则引擎QLExpress-入门实战

    介绍 规则引擎,顾名思义是针对我们业务系统中普世的规则进行统一管理,通过该引擎进行调度计算,可以动态调整规则的表达式内容,而不影响业务系统代码,常见的业务典型场景有电商中促销活动,单品折扣.整场活动满 ...

  2. 规则引擎技术选型-qlExpress

    目录 1.背景&痛点 2.目前主流规则引擎框架 3.目前业务特点选型 4.风险&缺点&优点 5.运行原理图​ 6.参考 1.背景&痛点 1)业务规则变化快,比如 价格的 ...

  3. 规则引擎QLExpress的简单应用

    QLExpress 是一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标 准的JAVA语法,还可以支持自定义 ...

  4. 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)

    haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...

  5. 阿里云学习笔记——设置规则引擎(2)

    标题阿里云学习笔记--设置规则引擎(2) 下面是我自己作为学习笔记分享,大神勿喷,如有叙述错误的地方欢迎指正. 1.定义Topic 定义了p_data和s_data 2.创建规则引擎,这里创建了APP ...

  6. 阿里云物联网平台设备间通信(通过规则引擎-云产品流转)

    阿里云物联网平台设备间通信(通过规则引擎-云产品流转) 前言 我们正常的使用阿里云物联网平台,一般是: 设备通过物模型上报数据属性 App通过云端API获取设备的数据属性 App通过云端API调用设备 ...

  7. Esp8266 进阶之路29【高级篇】百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接,支持阿里云规则引擎。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. QLExpress 规则引擎使用介绍

    QLExpress 规则引擎使用介绍 一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标准的JAVA语法,还 ...

  9. QLExpress规则引擎使用笔记

    目录 QLExpress支持哪些操作符? 手机号前缀规则 demo 地址规则 demo 地址+手机号前缀组合demo 自定义操作符 自定义的对象(例如Spring对象)方法转换为表达式 QLExpre ...

  10. QLExpress规则引擎介绍

    规则引擎定义 根据数据来匹配对应的条件,并执行规则匹配后的动作系统.如果满足某些条件,就执行相关动作. 好处 可以帮助我们把多变的业务决策部分同其他业务逻辑隔离开,是的业务人员能够自行定制业务逻辑,无 ...

最新文章

  1. Windows、WSL 与 Linux 的性能对比
  2. Windows GPT磁盘GUID结构详解
  3. System.arraycopy()和 Arrays.copyOf()的区别联系(源码深度解析copyOf扩容原理)
  4. C++ 函数参数3种传值方式(以交换两个数为例)
  5. Spring Tool Suite 4 添加反编译插件
  6. java 方法的返回值(翻译自Java Tutorials)
  7. Spring-core-SpringFactoriesLoader类
  8. .NET进销存系统开发笔记------之Gridview应用
  9. og 的 debug()、 error()、 info()方法的区别
  10. 数据采集的大致流程(离线和实时)
  11. dw中html是什么,dw中的css是什么意思?
  12. UMail邮件服务器竖铜墙铁壁有效阻止垃圾邮件入侵
  13. 对垒以太网10BASE-T1S,CAN XL能后来居上么?
  14. 2021,买基金还是买房?
  15. 电子合同管理有这些细节更需要注意!
  16. XGBoost: A Scalable Tree Boosting System翻译
  17. 第一章:第一节数据载入及初步观察-课程
  18. 软考高级已过,可以继续考软考中级吗?
  19. (一)分布式存储综述
  20. iOS粘性拖拽红点动画研究

热门文章

  1. linux挂盘视频教程,Linux新手入门教程:教你硬盘挂载方法
  2. js解析复杂json对象
  3. Python批量操作文件写入数据库及从数据库取数据
  4. 拼多多API分享:拼多多关键词搜索商品列表 取商品ID
  5. [web面试] 2015年最新前端开发面试题集合(非常全面)
  6. 一篇简短的文本摘要综述
  7. 基于JAVA高校食品安全系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  8. 【害虫远程监测站】织密智能“防控网” ,打造监测“千里眼”
  9. 游戏3D建模师是一个什么样的职业
  10. linux 配置环境变量