摘要:規(guī)則引擎集合相關(guān)處理在實(shí)際生產(chǎn)過程中,有很多關(guān)于集合的處理場(chǎng)景,比如一個(gè)對(duì)象中包含有一個(gè)集合,而需要判斷該集合是否包含某個(gè)值。而規(guī)則引擎也提供了多種處理方式,比如通過等進(jìn)行操作,比較。然后,通過關(guān)鍵字來遍歷中的值,獲得符合條件的。
規(guī)則引擎集合相關(guān)處理
在實(shí)際生產(chǎn)過程中,有很多關(guān)于集合的處理場(chǎng)景,比如一個(gè)Fact對(duì)象中包含有一個(gè)集合,而需要判斷該集合是否包含某個(gè)值。而Drools規(guī)則引擎也提供了多種處理方式,比如通過from、contains、exists等進(jìn)行操作,比較。
當(dāng)然也可以通過function函數(shù)來做相應(yīng)的比較,在個(gè)在其他章節(jié)講到過,就不在此贅述。下面重點(diǎn)以幾個(gè)實(shí)例才進(jìn)行講解,在具體實(shí)踐中根據(jù)具體情況來進(jìn)行運(yùn)用。
實(shí)例省略掉基本的配置,直接看調(diào)用代碼和規(guī)則代碼。
測(cè)試調(diào)用代碼:
public class ContainsDemo extends BaseDemo { public static void main(String[] args) { KieSession kieSession = getKieSession("containsVar"); Corporation corporation = new Corporation(); Setscopes = new HashSet<>(); scopes.add(new Scope("P2P")); scopes.add(new Scope("金融")); scopes.add(new Scope("區(qū)塊鏈")); corporation.setScopes(scopes); Scope scope = new Scope("區(qū)塊鏈"); kieSession.insert(corporation); kieSession.insert(scope); kieSession.fireAllRules(); } }
相關(guān)實(shí)體類:
@Data public class Corporation { private Setscopes; }
@Data public class Scope { public Scope(String scope){ this.scope = scope; } private String scope; }
然后看一下規(guī)則處理:
package com.containsVar import com.secbro2.drools.entity.Corporation import com.secbro2.drools.entity.Scope import java.util.List rule "containsVar1" when $c: Corporation($scopes:scopes); $s: Scope(scope == "P2P") from $scopes; then System.out.println("containsVar1行業(yè)類型為:P2P"); end rule "containsVar2" when $c: Corporation($scopes:scopes); exists (Scope(scope == "P2P") from $scopes); then System.out.println("containsVar2行業(yè)類型為:P2P"); end rule "containsVar3" when $s: Scope(scope == "區(qū)塊鏈") $c: Corporation(scopes contains $s); then System.out.println("containsVar3行業(yè)類型為:區(qū)塊鏈"); end rule "containsVar4" when $s: Scope(scope == "區(qū)塊鏈") exists (Corporation(scopes contains $s)); then System.out.println("containsVar4行業(yè)類型為:區(qū)塊鏈"); end
在上述實(shí)例中列舉了4中使用方法:
第一種,首先獲取Fact對(duì)象Corporation,并重新定義了它的屬性$scopes。然后,通過from關(guān)鍵字來遍歷$scopes中的值,獲得符合條件的。此時(shí)并不需要傳入Scope對(duì)應(yīng)的fact對(duì)象。
第二種,前半部分同第一種方式,是不過沒有獲取篩選的結(jié)果,直接用exists來判斷是否存在。
第三種,先獲得滿足條件的Scope的Fact對(duì)象,然后再利用此fact對(duì)Corporation的fact對(duì)象進(jìn)行篩選,只有滿足條件才可以繼續(xù)。
第四種,與第三種效果相同,原理同第二種方式的exists使用。
相關(guān)技術(shù)視頻CSDN學(xué)院:《Drools7規(guī)則引擎進(jìn)階教程》
CSDN學(xué)院:《Drools7規(guī)則引擎入門教程》
CSDN學(xué)院:《Drools7系列優(yōu)惠套餐》
原文鏈接:http://www.choupangxia.com/20...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75718.html
摘要:今天這批文章就帶大家了解一下規(guī)則引擎中比較操作符之一的。對(duì)象類代碼調(diào)用規(guī)則引擎代碼歡迎張三歡迎張三張三規(guī)則代碼,這里模擬了兩種場(chǎng)景的規(guī)則判斷規(guī)則觸發(fā)規(guī)則觸發(fā)執(zhí)行結(jié)果規(guī)則觸發(fā)規(guī)則觸發(fā) 場(chǎng)景 規(guī)則引擎技術(shù)討論2群(715840230)有同學(xué)提出疑問,memberOf的使用過程中如果,memberOf之后的參數(shù)不是集合也不是數(shù)組,而是格式如1,2,3,4的字符串,那么Drools是否會(huì)講其轉(zhuǎn)...
摘要:?jiǎn)栴}場(chǎng)景在使用規(guī)則引擎時(shí),有朋友會(huì)遇到這樣的問題,就是在部分判斷的兩個(gè)參數(shù)都是集合類型,比如兩個(gè),此時(shí)要判斷一個(gè)集合是否包含另外一個(gè)集合的內(nèi)容。 問題場(chǎng)景 在使用Drools規(guī)則引擎時(shí),有朋友會(huì)遇到這樣的問題,就是在when部分判斷的兩個(gè)參數(shù)都是集合類型,比如兩個(gè)List,此時(shí)要判斷一個(gè)集合是否包含另外一個(gè)集合的內(nèi)容。 拿一個(gè)具體的例子來說明,我的公眾號(hào)《程序新視界》接受商務(wù)合作有一定...
摘要:比如我們的指標(biāo)是最近分鐘的同一用戶的下單量,那么我們就需要實(shí)現(xiàn)一種類似的滑動(dòng)窗口算法,以便任何時(shí)候都能拿到最近分鐘的數(shù)據(jù)。 此文已由作者肖凡授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 背景考拉安全部技術(shù)這塊目前主要負(fù)責(zé)兩塊業(yè)務(wù):一個(gè)是內(nèi)審,主要是通過敏感日志管理平臺(tái)搜集考拉所有后臺(tái)系統(tǒng)的操作日志,數(shù)據(jù)導(dǎo)入到es后,結(jié)合storm進(jìn)行實(shí)時(shí)計(jì)算,主要有行為查詢...
摘要:比如對(duì)一個(gè)企業(yè)進(jìn)行信用評(píng)級(jí),涉及三個(gè)維度企業(yè)年齡企業(yè)注冊(cè)資本與企業(yè)法人年齡。增加判斷如果是將三個(gè)業(yè)務(wù)的判斷放在一個(gè)規(guī)則當(dāng)中,那么對(duì)對(duì)象為的情況就需要特殊處理了。 問題場(chǎng)景 在技術(shù)交流群(QQ:715840230)中有同學(xué)提出這樣的問題: 往kiesession里面?zhèn)魅雈act,如果不做輸入檢查fact里面有些字段可能是null值。但是如果在外面做輸入檢查,規(guī)則一改,fact所需要的字段...
閱讀 2641·2021-11-18 10:07
閱讀 1090·2021-08-03 14:04
閱讀 733·2019-08-30 13:08
閱讀 2587·2019-08-29 15:33
閱讀 1102·2019-08-29 14:07
閱讀 3002·2019-08-29 14:04
閱讀 1448·2019-08-29 11:19
閱讀 1155·2019-08-29 10:59