QLExpress-阿里规则引擎
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-阿里规则引擎相关推荐
- 阿里开源规则引擎QLExpress-入门实战
介绍 规则引擎,顾名思义是针对我们业务系统中普世的规则进行统一管理,通过该引擎进行调度计算,可以动态调整规则的表达式内容,而不影响业务系统代码,常见的业务典型场景有电商中促销活动,单品折扣.整场活动满 ...
- 规则引擎技术选型-qlExpress
目录 1.背景&痛点 2.目前主流规则引擎框架 3.目前业务特点选型 4.风险&缺点&优点 5.运行原理图 6.参考 1.背景&痛点 1)业务规则变化快,比如 价格的 ...
- 规则引擎QLExpress的简单应用
QLExpress 是一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标 准的JAVA语法,还可以支持自定义 ...
- 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)
haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...
- 阿里云学习笔记——设置规则引擎(2)
标题阿里云学习笔记--设置规则引擎(2) 下面是我自己作为学习笔记分享,大神勿喷,如有叙述错误的地方欢迎指正. 1.定义Topic 定义了p_data和s_data 2.创建规则引擎,这里创建了APP ...
- 阿里云物联网平台设备间通信(通过规则引擎-云产品流转)
阿里云物联网平台设备间通信(通过规则引擎-云产品流转) 前言 我们正常的使用阿里云物联网平台,一般是: 设备通过物模型上报数据属性 App通过云端API获取设备的数据属性 App通过云端API调用设备 ...
- Esp8266 进阶之路29【高级篇】百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接,支持阿里云规则引擎。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- QLExpress 规则引擎使用介绍
QLExpress 规则引擎使用介绍 一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标准的JAVA语法,还 ...
- QLExpress规则引擎使用笔记
目录 QLExpress支持哪些操作符? 手机号前缀规则 demo 地址规则 demo 地址+手机号前缀组合demo 自定义操作符 自定义的对象(例如Spring对象)方法转换为表达式 QLExpre ...
- QLExpress规则引擎介绍
规则引擎定义 根据数据来匹配对应的条件,并执行规则匹配后的动作系统.如果满足某些条件,就执行相关动作. 好处 可以帮助我们把多变的业务决策部分同其他业务逻辑隔离开,是的业务人员能够自行定制业务逻辑,无 ...
最新文章
- kafka 基础知识梳理及集群环境部署记录
- Visual Studio插件
- Leetcode 350. 两个数组的交集 II 解题思路及C++实现
- spring boot security学习
- leetcode —— 19. 删除链表的倒数第N个节点
- 路由器访问控制列表详解
- android opengl 图像同步fence创建
- 19_完成“我的订单”
- 2022年JDK-8下载方法
- 将 CoAP 协议设备接入 EMQX Cloud
- Android apk安装报错:应用未安装 软件包似乎已损坏
- 华为应用市场名称问题
- 100php等于多少RMB,100000 CNY
- 服务器重启之后 宝塔面板打不开
- 微信小程序开发入门教程(十)
- png格式的图片体积太大怎么办?如何压缩png图片?
- 学习笔记16 window service 服务的相关内容
- 木鱼《觉醒年代》观后感
- Base Filtering Engine (BFE)服务无法启动
- MatLab画直方图并填充纹理
热门文章
- 几款分布式数据库的对比
- Axure 文本框输入字数限制
- css !important的用法
- Apexcharts中如何设置x轴间距(x轴的数据太多,不想完全显示,只想显示几条)
- 亲子游戏:逻辑不一样[图]
- osgEarth波士顿城市建筑生成案例 3. boston_buildings.earth
- 软件工程之美学习笔记十一 10 | 如果你想技术转管理,先来试试管好一个项目
- js实现回到上一页的功能,介绍三种方法,其中一种在新开的页面中也适用
- vivoz5电池测试软件,5小时续航测试,vivo Z5x还剩多少电量?实测结果令人惊艳!...
- 正确使用mybatis游标