Слюни - Несколько совпадений в предложении затем
Я создаю правило, которое должно срабатывать при выполнении одного или нескольких условий. Правило выглядит следующим образом:
rule "Demo Rule"
when
$data : Data (val == 1 || val == 2)
then
System.out.println($data);
end
У меня есть тест для правила, в котором есть два совпадающих объекта данных (val 1 и val 2). Правило срабатывает правильно, так как оно попадает в оператор печати. Тем не менее, я не могу найти способ разобрать $data и получить доступ к отдельным соответствующим объектам Data. Результат печати следующий:
custom.package.Data< val: 1, text:'Test1' >
custom.package.Data< val: 2, text:'Test2' >
Итак, я вижу, что несколько записей присутствуют. Но попытка вызова как массива ($data[0]) или $data$1 или чего-либо еще, о чем я мог думать, приводит к ошибкам синтаксического анализа Drools (жалуясь, что $data является объектом Data, а не массивом или списком или другим итератором),
1 ответ
Правило применяется один раз для каждого объекта, соответствующего вашему условию. Итак, вам нужно получить доступ к объекту данных напрямую, как $data.val
а также data.text
Если вам нужны / нужны объекты в списке, вы можете использовать collect
для этого. Тогда твое правило будет
rule "Demo Rule"
when
$dataList : ArrayList() from collect( Data (val == 1 || val == 2) )
then
System.out.println($dataList);
end