如何在 Drools 规则中声明一个列表

How to declare a List in Drools rule

我有一个简单的对象构造。 class ContextDroolsObject 有一个名为 objects 的类型 Map 的 属性。在那个地图里面有一个键 "imageThemes" 和一个 ArrayList 而这个规则永远不会匹配:

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

我也试过用 List() 得到同样的结果。

¿如何匹配列表声明?

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

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

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

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

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