《Drools7.0.0.Final規則引擎教程》番外例項篇——Map使用案例
阿新 • • 發佈:2019-01-01
背景
技術交流群中,不少朋友在問,如何在Drools規則檔案中使用Map。今天就用例項帶大家瞭解一下map的使用方法。
例項程式碼
測試部分程式碼:
@Test
public void testMapUsage() {
KieSession kieSession = this.getKieSession("map-group");
Map<String, Person> map = new HashMap<>();
Person p1 = new Person();
p1.setAge(10 );
map.put("p1",p1);
Person p2 = new Person();
p2.setAge(20);
map.put("p2",p2);
kieSession.insert(map);
int count = kieSession.fireAllRules();
System.out.println("Fire " + count + " rule(s)!");
}
首先,我們建立了一個map,map中存放了兩個Person物件,隨後將map insert到了session中。其中這兩個Person的年紀是不同的。
下面看一下規則程式碼:
package com.rules
import java.util.Map;
import com.secbro.drools.model.Person;
rule "map-usage"
agenda-group "map-group"
when
$obj : Object();
$map : Map(["p1"] != $obj);
then
System.out.println("p1's age is " + ((Person)$map.get("p1")).getAge());
System.out .println("p2's age is " + ((Person)$map.get("p2")).getAge());
end
規則中首先定義了一個Object物件,此物件肯定是存在的。另外就是給map定義一個變數,獲取了map中key為p1的物件,並比較p1這個物件與$obj物件是否相當,不相等的話滿足條件。在上面的過程中實現了一種從map獲取物件的方法。
然後再看一下RHS部分,直接使用get方法從map中獲取值,並強轉為原始的物件,呼叫物件的對應方法。
執行結果如下:
p1's age is 10
p2's age is 20
Fire 1 rule(s)!
後語
此係列課程持續更新中,QQ群:593177274(可掃描左上側欄目二維碼),歡迎大家加入討論。點選連結關注《Drools部落格專欄》 。目前國內第一套關於Drools(7)的入門教程《Drools 7 規則引擎入門教程》正在火熱錄製中,其他更多關於Drools的系列教程也在籌劃中,希望大家多多支援。