Как вставить объекты из списка в правило 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 у вас будет только одна активация и огонь на человека. Это правда, что со вторым вариантом вы не можете хорошо фильтровать адреса, но вы определенно уменьшите количество срабатываний. Все зависит от того, что вы хотите сделать с адресами, и если вы заботитесь об увольнениях или нет.