2017-01-26 41 views
0

我有一個簡單的對象構造。類ContextDroolsObjectMap類型的屬性,稱爲objects。裏面那個地圖這裏有一個關鍵"imageThemes"ArrayList這條規則永遠不匹配:如何在Drools規則中聲明一個列表

import java.util.ArrayList; 
import java.util.Map; 
import com.my.ContextDroolsObject; 

dialect 'java' 


rule 'Soccer Image Theme' 
    salience 100 
    when 
     s : ContextDroolsObject() 
     objectsm : Map() from s.objects 
     imageThemesList : ArrayList() from outputsm.imageThemes 
    then 
System.out.println("-----------------------soccer"); 
    end 

我也試過用列表()有同樣的結果。

¿如何匹配列表聲明?

回答

1

嗨,你可以重寫你的規則是這樣的:

import java.util.ArrayList; 
import java.util.Map; 
import com.my.ContextDroolsObject; 

dialect 'java' 


rule 'Soccer Image Theme' 
salience 100 
when 
    s : ContextDroolsObject(imageThemesList : objects#Map.get("imageThemes")) 
then 
    System.out.println("-----------------------soccer"); 
end 
0

對事實對象使用層次結構常常是設計缺陷。您可能無法輕鬆地通過列表元素。

無論如何,這是從ContextDroolsObject提取地圖內的列表的方式。

rule 'Soccer Image Theme' 
    salience 100 
when 
    s: ContextDroolsObject() 
    imageThemesList: ArrayList() from s.getObjects().get("imageThemes") 
then 
    System.out.println("-----------------------soccer"); 
end 
+0

我剛試過,沒有奏效。我第一天就發現了這個缺陷設計,因爲我之前和其他規則引擎一起工作過,但是......在這裏有一個更聰明的人作爲架構師...... – eduyayo