Drools变量绑定:不允许重新分配

Drools变量绑定:不允许重新分配,drools,Drools,假设MyObject是一个Java对象,具有名为integerProperty的整数属性。 我想写一个Drools规则,如下所示(语法错误): 当有一组超过10个类型为MyObject的元素,其integerProperty值形成算术序列时,我想触发我的规则,例如1,2,3,…在这种情况下,我将为HardMediumSoftLongCore对象指定一个负值(希望这些信息能有所帮助) 我确信具有给定的integerProperty的MyObject是唯一的(例如,只有一个MyObject具有int

假设
MyObject
是一个Java对象,具有名为
integerProperty
的整数属性。 我想写一个Drools规则,如下所示(语法错误):

当有一组超过10个类型为
MyObject
的元素,其
integerProperty
值形成算术序列时,我想触发我的规则,例如
1
2
3
,…在这种情况下,我将为
HardMediumSoftLongCore
对象指定一个负值(希望这些信息能有所帮助)


我确信具有给定的
integerProperty
MyObject
是唯一的(例如,只有一个
MyObject
具有
integerProperty
等于,比如说,
2
)。问题是不允许我重新分配变量binding
$integerProperty
。有没有办法解决这个问题?

尝试实现下面的示例,并检查是否获得了所需的输出。在触发规则之前,将上一个对象作为全局变量插入(在下面的示例中为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()

你能解释一下你的要求吗?据我所知,你正在积累一个有序的对象序列,当累加器的值大于10时,你想做些什么。你能提供更多的细节吗?我试图编辑这个问题,希望它能帮上忙!谢谢你的兴趣!你想像一组滚动的对象一样积累对象吗对象或翻滚分组?对不起,我遗漏了一些内容。请解释一下区别。翻滚意味着该窗口中的对象数将被分组,窗口将根据窗口大小进行移动,而在滑动的情况下,窗口将滑动1。例如,假设您的窗口长度为5;在翻滚窗口中windows对象在第一个窗口中将是o1、o2、o3、o4、o5,然后第二个窗口将有o6、o7、o8、o9、o10,但在滑动窗口的情况下,第一个窗口内的对象是o1、o2、o3、o4、o5,第二个窗口中的对象是o2、o3、o4、o5、o6。请您再解释一点好吗?您的意思是t中必须有一个
全局MyObject prev
.drl
文件?在上面的代码中,我在哪里将其设置为具有所需属性的上一个
MyObject
?抱歉,但我对Drools很陌生。上面的规则满足您的要求吗?不,它不能正常启动。规则引擎无法识别
prev
kieSession.setGlobal("prev",myprevobject)
kieSession.insert(myobject)
kieSession.fireAllRules()