Drools規則引擎-memberOf操做

場景

規則引擎技術討論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代碼:code

public class Member {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

調用規則引擎代碼:對象

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

執行結果:字符串

memberofRule規則觸發!
memberofRule2規則觸發!

csdn-微信公衆號

相關文章
相關標籤/搜索