我创建的规则需要在满足一个或多个条件时触发。该规则如下:
rule "Demo Rule"
when
$data : Data (val == 1 || val == 2)
then
System.out.println($data);
end
我对规则进行了测试,该测试有两个匹配的Data对象(val 1和val 2)。当规则到达print语句时,规则会正确触发。但是,我找不到解析$ data和访问各个匹配Data对象的方法。 println的结果如下:
custom.package.Data< val: 1, text:'Test1' >
custom.package.Data< val: 2, text:'Test2' >
所以,我可以看到存在多个条目。但尝试调用数组($ data [0])或$ data $ 1或任何我能想到的结果都会导致Drools解析错误(抱怨$ data是一个Data对象,而不是数组或列表或其他可迭代的)
答案 0 :(得分:3)
每个符合条件的对象会触发一次规则。因此,您需要直接以$data.val
和data.text
如果您需要/想要列表中的对象,可以使用collect
。然后你的规则就像
rule "Demo Rule"
when
$dataList : ArrayList() from collect( Data (val == 1 || val == 2) )
then
System.out.println($dataList);
end