摘要:问题场景在使用规则引擎时,有朋友会遇到这样的问题,就是在部分判断的两个参数都是集合类型,比如两个,此时要判断一个集合是否包含另外一个集合的内容。
问题场景
在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。
拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定的要求,设置了对应行业的黑名单,比如:房地产、游戏和P2P领域的合作不接。
那么此时,有一个广告商准备投放广告,而它投放的广告领域涵盖了教育和P2P,那么,在进行规则筛选时就出现了要判断提供的集合中的元素是否包含在被排除领域里面。如果其中一个元素包含,则触发规则。
代码实现这里用代码片段来演示此功能的实现。
两个集合相关代码:
public class Company { private Listscopes; public List getScopes() { return scopes; } public void setScopes(List scopes) { this.scopes = scopes; } }
Company company = new Company(); ListtargetList = new ArrayList<>(); targetList.add("教育"); targetList.add("P2P"); company.setScopes(targetList); List blackList = new ArrayList<>(); blackList.add("房地产"); blackList.add("游戏"); blackList.add("P2P"); kieSession.insert(company); kieSession.insert(blackList); kieSession.fireAllRules();
Drools drl 中实现对此内容的比较有两种方案,一种方案是直接调用外部的工具类进行比较,采用global进行引入,这里不再介绍,另外一种就是采用自定义function进行匹配处理,然后将结果返回给when部分进行处理。
规则代码:
package com.compareList import com.secbro2.drools.entity.Company import java.util.List import java.util.ArrayList rule "compareListRule" when $blackList: List(); $company: Company($scopList:scopes,toCompareList(scopes,$blackList)); then System.out.println("黑名单规则触发!"); end function Boolean toCompareList(List targetList, List blackList){ Boolean flag = false; for(Object obj : targetList){ if(blackList.contains(obj)){ flag = true; break; } } return flag; }
其中toCompareList提供的对比的功能,而该功能的结果又用作Company的过滤条件来进行筛选。如果筛选结果符合,说明两个集合里面有交叉部分,因此出发规则进行相应处理。
更多规则引擎相关视频教程可观看:
CSDN学院:《Drools7系列优惠套餐》
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75396.html
摘要:规则引擎集合相关处理在实际生产过程中,有很多关于集合的处理场景,比如一个对象中包含有一个集合,而需要判断该集合是否包含某个值。而规则引擎也提供了多种处理方式,比如通过等进行操作,比较。然后,通过关键字来遍历中的值,获得符合条件的。 规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引...
摘要:今天这批文章就带大家了解一下规则引擎中比较操作符之一的。对象类代码调用规则引擎代码欢迎张三欢迎张三张三规则代码,这里模拟了两种场景的规则判断规则触发规则触发执行结果规则触发规则触发 场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如1,2,3,4的字符串,那么Drools是否会讲其转...
摘要:比如我们的指标是最近分钟的同一用户的下单量,那么我们就需要实现一种类似的滑动窗口算法,以便任何时候都能拿到最近分钟的数据。 此文已由作者肖凡授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 背景考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作日志,数据导入到es后,结合storm进行实时计算,主要有行为查询...
摘要:比如对一个企业进行信用评级,涉及三个维度企业年龄企业注册资本与企业法人年龄。增加判断如果是将三个业务的判断放在一个规则当中,那么对对象为的情况就需要特殊处理了。 问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值。但是如果在外面做输入检查,规则一改,fact所需要的字段...
阅读 3528·2021-11-24 09:38
阅读 3069·2021-11-15 11:37
阅读 756·2021-11-12 10:36
阅读 3496·2021-10-21 09:38
阅读 3204·2021-09-28 09:36
阅读 2385·2021-09-22 16:01
阅读 4827·2021-09-22 15:09
阅读 1187·2019-08-30 15:55