规则引擎 Drools(十一):条件元素 accumulate

accumulate

accumulate 用于遍历数据集对数据项执行自定义或预设动作并返回结果。

自定义

示例:

遍历所有的姑娘计算姑娘们的平均年龄。

rule "test accumulate"  
    when
        $avg: Number() from accumulate(Person(sex == "female", $age: age), init(int total = 0, count = 0;), action(total += $age; count++;), reverse(total -= $age; count--;), result(total/count))
    then
        System.out.println("Avg: " + $avg);
end  

自定义 accunmulate 由以下四部分组成:

  • init 初始化变量
  • action 每次遍历执行的动作
  • reverse (可选)反转动作,用于优化
  • result 返回的执行结果

预设

示例:

遍历所有的姑娘计算姑娘们的平均年龄。

rule "test accumulate"  
    when
        accumulate(Person(sex == "female", $age: age); $avg: average($age))
    then
        System.out.println("Avg: " + $avg);
end  

accumulate 提供的预设动作:

  • average 计算平均数
  • min 计算最小值
  • max 计算最大值
  • count 计算总数
  • sum 计算总和
  • collectList 获取列表
  • collectSet 获取集合