規則引擎技術討論2羣(715840230)有同窗提出疑問,memberOf的使用過程當中若是,memberOf以後的參數不是集合也不是數組,而是格式如「1,2,3,4」的字符串,那麼Drools是否會講其轉換成數組?java
其實很顯然,Drools規則引擎不會這麼作,它也並不知道你定義的字符串的格式及分隔符是什麼,不會像SpringMVC那樣約定好以json格式進行解析。json
今天這批文章就帶你們瞭解一下drools規則引擎中比較操做符之一的memberOf。數組
官方文檔和網絡上的資料給出的解釋基本上都是:用來判斷某個 Fact對象的某個字段是否在一個集合(Collection/Array)當中) 。微信
其中,這忽略了它的一個功能,就是若是它後面緊跟的不是集合或數組,而是字符串的話,它判斷的標準就變爲:該字符串是否包含Fact對象的字段內容了。固然這個過程並不會神奇的轉換成數組什麼的,僅僅相似於Java中String提供的contains方法的比較。網絡
下面以具體的代碼來展現基於集合和字符串的判斷示例。this
Fact對象類member代碼:spa
public class Member { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
調用規則引擎代碼:code
KieSession kieSession = getKieSession("memberOfSession"); String str = "歡迎張三!"; List<String> list = new ArrayList<>(); list.add("歡迎"); list.add("張三"); list.add("!"); Member member = new Member(); member.setName("張三"); kieSession.insert(str); kieSession.insert(list); kieSession.insert(member); kieSession.fireAllRules();
規則代碼,這裏模擬了兩種場景的規則判斷:對象
package com.memberof import com.secbro2.drools.entity.Member import java.util.List rule "memberofRule1" when $s:String(); $c:Member(name memberOf $s); then System.out.println("memberofRule規則觸發!"); end rule "memberofRule2" when $list:List(); $c:Member(name memberOf $list); then System.out.println("memberofRule2規則觸發!"); end
執行結果:rem
memberofRule規則觸發! memberofRule2規則觸發!