Как вставить объекты из списка в правило drools?

Я хочу динамически вставлять список объектов в тогдашнюю часть, когда это правило включено для запуска.

rule "insert adresses"
  when
  $person:Person(state=="DC")
   then
       //insert all address of this person, person.getAddresses() return a set of Address

2 ответа

2 возможных способа:

rule "insert adresses"
when
  $person: Person(state=="DC")
  $a: Address() from $person.getAddresses()
then
  insert($a);
end

а также

rule "insert adresses"
when
  $person: Person(state=="DC")
then
  for (Address a : $person.getAddresses()){
    insert(a);
  }
end

Оба правила имеют одинаковый результат. Возможно, вариант номер один лучше, если вы хотите добавить фильтр к адресам, которые вы хотите вставить.

Надеюсь, поможет,

На самом деле я думаю, что есть некоторые различия. В варианте 1 будет одна активация и выстрел на адрес. В варианте 2 у вас будет только одна активация и огонь на человека. Это правда, что со вторым вариантом вы не можете хорошо фильтровать адреса, но вы определенно уменьшите количество срабатываний. Все зависит от того, что вы хотите сделать с адресами, и если вы заботитесь об увольнениях или нет.

Другие вопросы по тегам