前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Drools规则引擎-判断集合(List)是否包含集合

Drools规则引擎-判断集合(List)是否包含集合

作者头像
程序新视界
发布2019-08-01 11:37:40
1.1K0
发布2019-08-01 11:37:40
举报
文章被收录于专栏:丑胖侠丑胖侠

问题场景

在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。

拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定的要求,设置了对应行业的黑名单,比如:房地产、游戏和P2P领域的合作不接。

那么此时,有一个广告商准备投放广告,而它投放的广告领域涵盖了教育和P2P,那么,在进行规则筛选时就出现了要判断提供的集合中的元素是否包含在被排除领域里面。如果其中一个元素包含,则触发规则。

代码实现

这里用代码片段来演示此功能的实现。 两个集合相关代码:

代码语言:javascript
复制
public class Company {

	private List<String> scopes;

	public List<String> getScopes() {
		return scopes;
	}

	public void setScopes(List<String> scopes) {
		this.scopes = scopes;
	}
}
代码语言:javascript
复制
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部分进行处理。

规则代码:

代码语言:javascript
复制
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的过滤条件来进行筛选。如果筛选结果符合,说明两个集合里面有交叉部分,因此出发规则进行相应处理。

原文链接:https://www.choupangxia.com/2019/07/14/drools规则引擎-判断集合是否包含集合/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题场景
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档