1,Drools提供的比較操作符,如下表:
符号 | 說明 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
contains | 檢查一個Fact對象的某個屬性值是否包含一個指定的對象值 |
not contains | 檢查一個Fact對象的某個屬性值是否不包含一個指定的對象值 |
memberOf | 判斷一個Fact對象的某個屬性是否在一個或多個集合中 |
not memberOf | 判斷一個Fact對象的某個屬性是否不在一個或多個集合中 |
matches | 判斷一個Fact對象的屬性是否與提供的标準的Java正規表達式進行比對 |
not matches | 判斷一個Fact對象的屬性是否不與提供的标準的Java正規表達式進行比對 |
前6個比較操作符和Java中的完全相同,下面我們重點學習後6個比較操作符。
2,建立規則檔案
package rules;
import com.dream21th.drools.study.demo3.Student;
rule "demo3_1"
when
$s:Student( age<10 && sex=="男")
then
System.out.println("觸發demo3_1:年齡小于"+$s.getAge());
$s.setResult("觸發demo3_1:年齡小于"+$s.getAge());
end
rule "demo3_2"
when
$s:Student(subjects contains "國文")
then
System.out.println("觸發demo3_2:課程中包含國文");
end
rule "demo3_3"
when
$s:Student("英語" memberOf subjects)
then
System.out.println("觸發demo3_3:英語包含在課程中");
end
rule "demo3_4"
when
$s:Student(subjects not contains "自然")
then
System.out.println("觸發demo3_4:課程中不包含自然");
end
rule "demo3_5"
when
$s:Student("社會" not memberOf subjects)
then
System.out.println("觸發demo3_5:社會不包含在課程中");
end
rule "demo3_6"
when
$s:Student(name matches "李.*")
then
System.out.println("觸發demo3_6:名字以李開頭");
end
rule "demo3_7"
when
$s:Student(name not matches "張.*")
then
System.out.println("觸發demo3_6:名字不以張開頭");
end |
3,建立測試類
package com.dream21th.drools.study.demo3;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import java.util.Arrays;
/*
* @Author dream21th
**/
public class Demo3Test {
@Test
public void test1(){
KieServices kieServices = KieServices.Factory.get();
KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
//會話對象,用于和規則引擎互動
KieSession kieSession = kieClasspathContainer.newKieSession();
Student student= Student.builder().age(12).sex("男").subjects(Arrays.asList("國文","英語")).name("李明").build();
kieSession.insert(student);
//激活規則引擎,如果規則比對成功則執行規則
kieSession.fireAllRules();
System.out.println(student);
//關閉會話
kieSession.dispose();
}
}
|
4,測試結果
觸發demo3_2:課程中包含國文 觸發demo3_3:英語包含在課程中 觸發demo3_4:課程中不包含自然 觸發demo3_5:社會不包含在課程中 觸發demo3_6:名字以李開頭 觸發demo3_6:名字不以張開頭 Student(name=李明, result=null, age=12, sex=男, subjects=[國文, 英語]) |
代碼位址: https://gitee.com/dream21th/drools-study