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. kafka 基础知识梳理及集群环境部署记录
  2. Visual Studio插件
  3. Leetcode 350. 两个数组的交集 II 解题思路及C++实现
  4. spring boot security学习
  5. leetcode —— 19. 删除链表的倒数第N个节点
  6. 路由器访问控制列表详解
  7. android opengl 图像同步fence创建
  8. 19_完成“我的订单”
  9. 2022年JDK-8下载方法
  10. 将 CoAP 协议设备接入 EMQX Cloud
  11. Android apk安装报错:应用未安装 软件包似乎已损坏
  12. 华为应用市场名称问题
  13. 100php等于多少RMB,100000 CNY
  14. 服务器重启之后 宝塔面板打不开
  15. 微信小程序开发入门教程(十)
  16. png格式的图片体积太大怎么办?如何压缩png图片?
  17. 学习笔记16 window service 服务的相关内容
  18. 木鱼《觉醒年代》观后感
  19. Base Filtering Engine (BFE)服务无法启动
  20. MatLab画直方图并填充纹理

热门文章

  1. 几款分布式数据库的对比
  2. Axure 文本框输入字数限制
  3. css !important的用法
  4. Apexcharts中如何设置x轴间距(x轴的数据太多,不想完全显示,只想显示几条)
  5. 亲子游戏:逻辑不一样[图]
  6. osgEarth波士顿城市建筑生成案例 3. boston_buildings.earth
  7. 软件工程之美学习笔记十一 10 | 如果你想技术转管理,先来试试管好一个项目
  8. js实现回到上一页的功能,介绍三种方法,其中一种在新开的页面中也适用
  9. vivoz5电池测试软件,5小时续航测试,vivo Z5x还剩多少电量?实测结果令人惊艳!...
  10. 正确使用mybatis游标