摘要:問題場景在使用規(guī)則引擎時(shí),有朋友會遇到這樣的問題,就是在部分判斷的兩個(gè)參數(shù)都是集合類型,比如兩個(gè),此時(shí)要判斷一個(gè)集合是否包含另外一個(gè)集合的內(nèi)容。
問題場景
在使用Drools規(guī)則引擎時(shí),有朋友會遇到這樣的問題,就是在when部分判斷的兩個(gè)參數(shù)都是集合類型,比如兩個(gè)List,此時(shí)要判斷一個(gè)集合是否包含另外一個(gè)集合的內(nèi)容。
拿一個(gè)具體的例子來說明,我的公眾號《程序新視界》接受商務(wù)合作有一定的要求,設(shè)置了對應(yīng)行業(yè)的黑名單,比如:房地產(chǎn)、游戲和P2P領(lǐng)域的合作不接。
那么此時(shí),有一個(gè)廣告商準(zhǔn)備投放廣告,而它投放的廣告領(lǐng)域涵蓋了教育和P2P,那么,在進(jìn)行規(guī)則篩選時(shí)就出現(xiàn)了要判斷提供的集合中的元素是否包含在被排除領(lǐng)域里面。如果其中一個(gè)元素包含,則觸發(fā)規(guī)則。
代碼實(shí)現(xiàn)這里用代碼片段來演示此功能的實(shí)現(xiàn)。
兩個(gè)集合相關(guān)代碼:
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("房地產(chǎn)"); blackList.add("游戲"); blackList.add("P2P"); kieSession.insert(company); kieSession.insert(blackList); kieSession.fireAllRules();
Drools drl 中實(shí)現(xiàn)對此內(nèi)容的比較有兩種方案,一種方案是直接調(diào)用外部的工具類進(jìn)行比較,采用global進(jìn)行引入,這里不再介紹,另外一種就是采用自定義function進(jìn)行匹配處理,然后將結(jié)果返回給when部分進(jìn)行處理。
規(guī)則代碼:
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("黑名單規(guī)則觸發(fā)!"); 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提供的對比的功能,而該功能的結(jié)果又用作Company的過濾條件來進(jìn)行篩選。如果篩選結(jié)果符合,說明兩個(gè)集合里面有交叉部分,因此出發(fā)規(guī)則進(jìn)行相應(yīng)處理。
更多規(guī)則引擎相關(guān)視頻教程可觀看:
CSDN學(xué)院:《Drools7系列優(yōu)惠套餐》
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75396.html
摘要:規(guī)則引擎集合相關(guān)處理在實(shí)際生產(chǎn)過程中,有很多關(guān)于集合的處理場景,比如一個(gè)對象中包含有一個(gè)集合,而需要判斷該集合是否包含某個(gè)值。而規(guī)則引擎也提供了多種處理方式,比如通過等進(jìn)行操作,比較。然后,通過關(guān)鍵字來遍歷中的值,獲得符合條件的。 規(guī)則引擎集合相關(guān)處理 在實(shí)際生產(chǎn)過程中,有很多關(guān)于集合的處理場景,比如一個(gè)Fact對象中包含有一個(gè)集合,而需要判斷該集合是否包含某個(gè)值。而Drools規(guī)則引...
摘要:今天這批文章就帶大家了解一下規(guī)則引擎中比較操作符之一的。對象類代碼調(diào)用規(guī)則引擎代碼歡迎張三歡迎張三張三規(guī)則代碼,這里模擬了兩種場景的規(guī)則判斷規(guī)則觸發(fā)規(guī)則觸發(fā)執(zhí)行結(jié)果規(guī)則觸發(fā)規(guī)則觸發(fā) 場景 規(guī)則引擎技術(shù)討論2群(715840230)有同學(xué)提出疑問,memberOf的使用過程中如果,memberOf之后的參數(shù)不是集合也不是數(shù)組,而是格式如1,2,3,4的字符串,那么Drools是否會講其轉(zhuǎn)...
摘要:比如我們的指標(biāo)是最近分鐘的同一用戶的下單量,那么我們就需要實(shí)現(xiàn)一種類似的滑動窗口算法,以便任何時(shí)候都能拿到最近分鐘的數(shù)據(jù)。 此文已由作者肖凡授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗(yàn)。 背景考拉安全部技術(shù)這塊目前主要負(fù)責(zé)兩塊業(yè)務(wù):一個(gè)是內(nèi)審,主要是通過敏感日志管理平臺搜集考拉所有后臺系統(tǒng)的操作日志,數(shù)據(jù)導(dǎo)入到es后,結(jié)合storm進(jìn)行實(shí)時(shí)計(jì)算,主要有行為查詢...
摘要:比如對一個(gè)企業(yè)進(jìn)行信用評級,涉及三個(gè)維度企業(yè)年齡企業(yè)注冊資本與企業(yè)法人年齡。增加判斷如果是將三個(gè)業(yè)務(wù)的判斷放在一個(gè)規(guī)則當(dāng)中,那么對對象為的情況就需要特殊處理了。 問題場景 在技術(shù)交流群(QQ:715840230)中有同學(xué)提出這樣的問題: 往kiesession里面?zhèn)魅雈act,如果不做輸入檢查fact里面有些字段可能是null值。但是如果在外面做輸入檢查,規(guī)則一改,fact所需要的字段...
閱讀 3639·2021-11-24 09:38
閱讀 3142·2021-11-15 11:37
閱讀 781·2021-11-12 10:36
閱讀 3547·2021-10-21 09:38
閱讀 3220·2021-09-28 09:36
閱讀 2420·2021-09-22 16:01
閱讀 4986·2021-09-22 15:09
閱讀 1210·2019-08-30 15:55