如何在Drools规则中声明List

时间:2017-01-26 10:01:47

标签: java drools rule-engine rule

我有一个简单的对象构造。类ContextDroolsObject具有名为Map的{​​{1}}类型的属性。在该地图中,有一个objects的密钥"imageThemes",此规则永远不会匹配:

ArrayList

我也尝试过使用相同结果的List()。

¿如何匹配列表声明?

2 个答案:

答案 0 :(得分:3)

您好,您可以这样重写您的规则:

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

答案 1 :(得分:1)

对事实对象使用层次结构通常是一个设计缺陷。您可能无法在列表元素上方便地进行推理。

无论如何,这是从ContextDroolsObject中提取地图中的列表的方法。

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