1. 程式人生 > >《Drools7.0.0.Final規則引擎教程》番外例項篇——Map使用案例

《Drools7.0.0.Final規則引擎教程》番外例項篇——Map使用案例

背景

技術交流群中,不少朋友在問,如何在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的系列教程也在籌劃中,希望大家多多支援。