1. 程式人生 > >Drools規則引擎-判斷集合(List)是否包含集合

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系列優惠套餐》 csd   
 
 </div> 
 <div class=

相關推薦

Drools規則引擎-判斷集合(List)是否包含集合

問題場景 在使用Drools規則引擎時,有朋友會遇到這樣的問題,就是在when部分判斷的兩個引數都是集合型別,比如兩個List,此

Spring Boot+Drools規則引擎整合

ood pid message star 定義 比較 java sch 4.0 目的 官方的Drools範例大都是基於純Java項目或Maven項目,而基於Spring Boot項目的很少。 本文介紹如何在Spring Boot項目上加上Drools規則引擎。 POM

drools規則引擎中易混淆語法分析_循環觸發導致死循環分析

int calculate efault drools put 階段 ons not quest 整理了下最近在項目中使用drools出現的問題,幸好都在開發與測試階段解決了,未波及到prod。 首先看這樣兩條規則 /** * 規則1_set默認利率 */

spring+maven整合Drools規則引擎詳解

       最近在弄規則引擎,在網上也找了很多,沒有一篇文章是完整的,基本上你能發現好多都是一個模子刻出來的,在這裡我把我整合的步驟給大家貼出來,供大家參考。        我這邊用的開發工具是Eclpise4

Drools 規則引擎

  轉 https://blog.csdn.net/qq_31179577/article/details/76585854 PS:文章還在寫,目前都是一些概念性質的,想要做拓展的程式猿請過幾天再看,Drools會一致做完的~~~ 1. 工欲善其事,必先利其器 Drools

drools-規則引擎語法

  轉  https://www.jianshu.com/p/6ca9dd36f7aa Drools語法-Language 關鍵詞 Pakage package package表示一個名稱空間.package是必須定義的,必須放在規則檔案第一行.

Drools規則引擎入門指南(二)

本篇部落格主要講解Drools常用的屬性以及函式 屬性 首先我們在resources\rules資料夾下建立一個Property.drl,還有一個DroolsApplicationPropertyTests 1. salience優先順序 salience 屬性的值預設為0,它的值越大執行的

Drools規則引擎入門指南(三)——使用Docker部署Workbench

其實本來我也是打算使用Tomcat來部署Workbench的,但是在網上看了幾篇文章,超級繁瑣的配置、各種版本。實在看不下去了索性就直接使用Docker來部署了。本次部署的版本是最新穩定版,對應drools的7.14.0.Final版本。 1. 拉取映象 1

Drools 規則引擎環境搭建

一、關於 drools 規則引擎 前面寫過一篇 Drools 規則引擎相關的文章,這篇文章主要記錄一下規則引擎的環境搭建和簡單示例。不熟悉 drools 的朋友可以看看這篇文章: 自己寫個 Drools 檔案語法檢查工具——棧的應用之編譯器檢測語法錯誤 介紹的內容: Drools 規則引擎的使用場景

Drools 規則引擎----向領域驅動進步(一)

PS:文章還在寫,目前都是一些概念性質的,想要做拓展的程式猿請過幾天再看,Drools會一致做完的~~~ 1. 工欲善其事,必先利其器 Drools提供基於eclipse的IDE(這是可選的),但其核心只需要Java 1.5(Java SE)。

CEP之於Drools規則引擎

什麼是CEP CEP(Complex Event Processing)是複雜事件處理系統; 可以將一個或多個的事實對映到一個或多個規則上; 接受大量的資料輸入,解釋業務規則,並根據業務規則做出

Drools 規則引擎----向領域驅動進步(四)

1.複雜事件處理 到目前為止,我們已經看到如何使用規則,以基於資料(我們稱呼它為fact)來做出決定。這個資訊幾乎是任何一組Java物件,它們描述了我們正在做決策的域的狀態,但是它總是在一個特定的時間點上代表這個世界的狀態。本章我們將會去看一些列的概念,配置和

規則引擎二:Drools規則引擎

原文連結:http://www.it165.net/pro/html/201503/36286.html Drools是一個開源的規則引擎,經過多年的發展,也提供如下商業BRMS具備的功能元件: 基於Eclipse的整合開發環境, 獨立集中的規則儲存庫 基於WE

Drools 規則引擎視訊教程》相關事宜

非常感謝大家能夠有時間來看這篇部落格,本篇部落格主要介紹一下最近本人正在致力於的Drools 7 規則引擎文件和視訊教程相關事項。 Drools 本身在國內的技術網站上的資料就比較少,最近的視訊教程更是幾乎沒有。本人最近一段時間正在致力於文件編寫(已經完成過半

.net 一個集合list包含另一個集合listb中的資料

var query = lista.Where(p=>!listb.Select(g=>g.id).Contain(p.id)) string str="abc,bbb,ccc";  List<string> filter_node_lst = s

JAVA中Drools規則引擎

在系統建設階段,有些功能是通過drools規則引擎來實現的,通過規則引擎,我們可以實現很多可以動態變更及函式過濾的功能,但是我們在處理字串處理的時候,不可避免的會遇到特殊字元的處理,所以我們針對特殊字元需要進行該轉義的轉義。主要的幾個字元如下:switch (sign)

drools規則引擎初探

htm 鏈接 char bubuko art 執行順序 listen dds oot 1.drools是什麽 Drools是為Java量身定制的基於Charles Forgy的RETE算法的規則引擎的實現。具有了OO接口的RETE,使得商業規則有了更自然的表達。 Rule

Drools規則引擎入門指南(一)

表達 sts lsa http 資源文件 用戶 批量 -c 對象 最近項目需要增加風控系統,在經過一番調研以後決定使用Drools規則引擎。因為項目是基於SpringCloud的架構,所以此次學習使用了SpringBoot2.0版本結合Drools7.14.0.Final

Drools規則引擎-如果Fact物件引數為null如何處理

問題場景 在技術交流群(QQ:715840230)中有同學提出這樣的問題: 往kiesession裡面傳入fact,如果不做輸入

一文入門Drools規則引擎

Drools是一款基於Java的優秀的規則引擎,將複雜多變的業務規則從硬編碼中解放出來,以規則指令碼的形式存放在檔案中,使得