Drools规则引擎-判断集合(List)是否包含集合
问题场景
在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。
拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定的要求,设置了对应行业的黑名单,比如:房地产、游戏和P2P领域的合作不接。
那么此时,有一个广告商准备投放广告,而它投放的广告领域涵盖了教育和P2P,那么,在进行规则筛选时就出现了要判断提供的集合中的元素是否包含在被排除领域里面。如果其中一个元素包含,则触发规则。
代码实现
这里用代码片段来演示此功能的实现。
两个集合相关代码:
public class Company {
private List<String> scopes;
public List<String> getScopes() {
return scopes;
}
public void setScopes(List<String> scopes) {
this.scopes = scopes;
}
}
Company company = new Company();
List<String> targetList = new ArrayList<>();
targetList.add("教育");
targetList.add("P2P");
company.setScopes(targetList);
List<String> 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系列优惠套餐》

Drools规则引擎-判断集合(List)是否包含集合的更多相关文章
- Drools规则引擎-如果判断某个对象中的集合是否包含指定的值
规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...
- Drools规则引擎入门指南(一)
最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...
- Drools规则引擎-memberOf操作
场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如"1,2,3,4"的字符串 ...
- Drools规则引擎实践直白总结
目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...
- Drools 规则引擎应用
规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...
- Drools 规则引擎应用 看这一篇就够了
1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...
- drools规则引擎初探
https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles Forgy的RETE算 ...
- Drools规则引擎
一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...
- Drools 规则引擎环境搭建
一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...
随机推荐
- VC++ 使用预编译头
一.使用默认的预编译头 要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件),想必大家都知 ...
- 欢迎订阅AI科技导读微信公众号,获取人工智能的最新技术解读教程!
微信扫一扫关注,获取最新AI技术教程!
- scp 专题
Tips:阿里云中需要使用内网ip,否则会一直阻塞Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例 ...
- 解释下Func<T, bool> exp
比如 interface IRepository<T> where T:class { IEnumerable<T> FindAll(Func<T, bool> e ...
- Android 8通过startService引起crash问题
Android 8.0 不再允许后台service直接通过startService方式去启动,否则就会引起IllegalStateException.解决方式: if (Build.VERSION.S ...
- [转] Protobuf高效结构化数据存储格式
从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么? Goo ...
- 使用网盘(Dropbox/Google Drive)同步Git仓库
还在使用老掉牙的U盘搬运代码(文件)的方式,从一台机器上复制后,粘贴到另一台机器上?太Out了.使用Github 倒是一个非常不错的替代方法.但无论是基于什么理由都有可能不想把代码公开(毕竟Githu ...
- 基于 libevent 开发的 C++ 11 高性能网络服务器 evpp(360的作品)
evpp是一个基于libevent开发的现代化C++11高性能网络服务器,自带TCP/UDP/HTTP等协议的异步非阻塞式的服务器和客户端库. 特性: 现代版的C++11接口 非阻塞异步接口都是C++ ...
- 11g Oracle导出表 默认不导出数据为空的表解决
11g oracle导出表时会默认不导出数据为空 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segm ...
- Windows Phone8.1系统新特性
Windows Phone 8.1 beta SDK已经为大家透露了不少WP8.1系统的新特性,不过这些新特性还不能保证在最终的消费者版本中都有所体现,毕竟它还仅是SDK版本.日前,国外媒体WPCen ...