Слюни - Несколько совпадений в предложении затем

Я создаю правило, которое должно срабатывать при выполнении одного или нескольких условий. Правило выглядит следующим образом:

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
Другие вопросы по тегам