如何在drools规则中从列表中插入对象?

时间:2013-09-19 03:09:42

标签: drools

我希望在运行此规则时动态插入then部分中的对象列表。

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

2 个答案:

答案 0 :(得分:4)

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 :(得分:1)

事实上我认为存在一些差异。在选项1中,每个地址将激活一次并触发。在选项2中,每人只需激活一次。 确实,使用第二个选项你不能以一种很好的方式过滤地址,但你肯定会减少点火。这一切都取决于你想对地址做什么,以及你是否关心点火。