Проверьте все элементы списка (Drools Expert) - PullRequest
1 голос
/ 24 февраля 2011

Я пытаюсь написать правила в Drools Expert. В части правила when я проверяю некоторые свойства объекта Application. Этот объект содержит список, и я хотел бы проверить, применяется ли набор правил ко всем объектам SomeOtherType в этом списке. Правило должно срабатывать только тогда, когда ограничения действительны для ВСЕХ объектов в этом списке.

rule "Application eligible"
    when
        app : Application(
               some constrains
               & write some constraints for all objects in app.getList() (a method
               that returns a List<SomeOtherType> object)
        )
    then 
        // application is eligible
end

Ответы [ 2 ]

3 голосов
/ 21 июля 2014

Я также нашел другой вид хакерского способа сделать это, если вы хотите обойти необходимость вставлять ваш объект в рабочую память, используя метод collect, как предложил Джеффри:

rule "Person has all brothers"
  when
    $person : Person(siblings != null, siblings.size > 0) 
    List(size == siblings.size) from collect (Person(sex != null, sex == "m") from $person.siblings)
  then
    #Person has all brothers
  end
2 голосов
/ 26 февраля 2011

Вставьте все свои SomeOtherType экземпляры в рабочую память, если вы еще этого не сделали. Затем попробуйте что-то вроде этого, если вы хотите проверить, что все SomeOtherType имеют цвет КРАСНЫЙ:

rule "Application eligible"
when
    $app : Application()
    forall( $x : SomeOtherType( application == $app ) 
            SomeOtherType( this == $x, color == RED ) )
then 
    // application is eligible
end
...