0

我正在创建一个规则,当满足一个或多个条件时需要触发。规则如下所示:

rule "Demo Rule"
    when
         $data : Data (val == 1 || val == 2)
    then
        System.out.println($data);
end

我有一个规则测试,它有两个匹配的数据对象(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 对象,而不是数组或列表或其他可迭代对象) .

4

1 回答 1

3

每个符合条件的对象都会触发一次规则。$data.val因此,您需要直接访问 Data 对象data.text

如果您需要/想要列表中的对象,您可以使用collect它。那么你的规则就像

rule "Demo Rule"
    when
         $dataList : ArrayList() from collect( Data (val == 1 || val == 2) )
    then
        System.out.println($dataList);
end
于 2013-10-17T05:05:15.407 回答