我对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
有没有办法知道数组中的值是否重复?我怎么知道我在变量项中得到的元素的索引是什么,在之后或之前添加值?
答案 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()) )