假设MyObject
是一个Java对象,其整数属性为integerProperty
。
我想编写类似以下的Drools规则(语法上不正确):
rule "myRule"
when
MyObject( $integerProperty : integerProperty )
accumulate(
$o : MyObject(
integerProperty == $integerProperty + 1,
$integerProperty : this.integerProperty
);
$total : count($o);
$total > 10
)
then
[BLABLABLA]
end
当一组MyObject
类型超过10个元素的integerProperty
值构成算术序列时,例如, 1
,2
,3
,……在这种情况下,我将为HardMediumSoftLongScore
对象分配一个负值(希望该信息有帮助)。
我确信具有给定MyObject
的{{1}}是唯一的(例如,只有一个integerProperty
的{{1}}等于{{1} }。问题是不允许我重新分配变量绑定MyObject
。有没有解决的办法?
答案 0 :(得分:0)
尝试实现以下示例,并检查是否获得所需的输出。在触发规则之前,在流口水会话中将前一个对象作为全局变量(在下例中为prev)插入。
global MyObject prev;
rule "myRule"
when
$total : Number(doubleValue > 10) from accumulate(
$o : MyObject( prev.getIntegerProperty() != null && $i : integerProperty == prev.getIntegerProperty() + 1),
init( double total = 0;),
action( total += 1; ),
reverse( total -= 1; ),
result( new Double( total ) ) )
then
[BLABLABLA]
end
在触发规则之前,在Java代码中将之前的对象设置为全局对象。请遵循以下代码:
kieSession.setGlobal("prev",myprevobject)
kieSession.insert(myobject)
kieSession.fireAllRules()