在drools中,可以对传递给DRL文件的Java列表应用规则,而无需将该列表放入工作内存中



我最近开始使用Drools,在编写drl文件时我遇到了这个问题。我正在创建一个"Person"类对象列表,并将此列表传递给.drl文件。现在我想迭代列表来检查Person (Person类的对象)的"薪水"是否大于某个值。但是,既然将集合放在工作内存中是一种不好的做法,那么不这样做的迭代是否可能呢?

迭代是Drools规则所固有的。这是命令式语言中的规则和if语句之间的区别之一。规则将对每个对象进行评估(这不是100%准确;流口水比存在于你的工作记忆中更聪明。

所以,如果你将每个person对象作为一个事实插入到会话中,你只需要一个规则来做你需要的:

rule 'Check Person Salary'
when
    $p: Person(salary > 1000)
then
    //do whatever you want with $p
end

每次插入Person对象时,将为其计算规则。如果对象通过了计算,将生成该规则的新激活。当您调用fireAllRules()时,所有的激活都将被执行:已激活规则的RHS将被执行。当然,这是对Drools和RETE算法如何工作的粗略解释。如需更准确的信息,请参阅Drools文档。

希望有帮助,

最新更新