Drools规则使用数字属性过滤元素,该属性低于List中总数的百分比

时间:2011-01-10 16:27:25

标签: java drools

我刚开始在一个小项目中使用Drools,现在我需要编写一个有点复杂的规则,我真的不知道最好的方法是什么。

我将此规则应用于相同类型的对象列表(此类具有名为 numberOfExecutions 的字段)。对于列表中的每个元素,我需要选择 numberOfExecutions total numberOfExecutions 5%的数字(numberOfExecutions的总和)列表中的所有元素。)

到目前为止,我想不出一个在drools中实现这个的好方法,有没有人有建议?

EDIT1: 到目前为止,我能想到的最好的方法是在应用规则之前预先计算numberOfExecutions的总和,并使这个值以某种方式用于drools规则。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以使用“Java”规则方言。创建一个函数来执行numberOfExecutions的逻辑并设置适当的标志。您可以逐个传递对象列表或单个对象,以检查numberOfExecutions条件。此方法将像任何常规java方法一样工作。以下是调用函数的小样本。它可能有所帮助。

rule "numberOfExecutions "
    dialect "java"
    salience -1

    when

        $obj : yourObject()     
        eval(if not counted)

    then        
        checkNumberOfExecution($obj);

end

function void checkNumberOfExecution(com.test.YourObject obj) {

        //Your logic
}

这只是一个暗示。你可以随意使用它。

感谢。