使用drools在数组中查找重复值

时间:2014-03-06 18:16:24

标签: arrays drools jbpm

我对Drools制定了一些规则。每个都将值添加到一个数组。 我遇到的问题是我需要检查这个条件:

  • 检查确定值是否在数组中。如果为true,则在该之后或之前添加新值。

  • 最后一步是检查数组。如果它有重复值,则规则将删除它们。

这是我的初始规则的结构:

rule "add value"
salience 500

      when
                products: Products($items : items)
                item : EprItem() from $items
                products: Products( totalAmount > 0 && < 999999999 )
      then
                Approver approver = new Approver();
                approver.setEmployeeNumber("11111");
                products.getApprovalPath().add(approver);
end

有没有办法知道数组中的值是否重复?我怎么知道我在变量项中得到的元素的索引是什么,在之后或之前添加值?

1 个答案:

答案 0 :(得分:1)

FWIW,这条规则的编写方式相当迂回。

when
products: Products( totalAmount > 0 && < 999999999 )
then

就足够了。

CE item : EprItem() from $items将导致为$ items中的每个元素触发一次规则 - 这不是你想要的。

要查看是否有重复项,请编写一个DRL函数(或静态Java方法)hasDuplicates,其中包含一个类型为Product.items的参数,如果存在重复项则返回true并将其称为:

when
products: Products( hasDuplicates(products.getItems()) )