流口水迭代以计算特定对象值

Iteration in drools to count specific object value

嗨,Drools 的新手,卡在我需要遍历对象列表并进行计数的地方,如果计数超出阈值,则分配一些值。

要求:计算其部门匹配“HR”的员工数量,如果超过数字 10,则为该部门分配特定范围。 我使用了下面的代码,但是它只给出了匹配项,不确定如何检查计数然后分配标签。

rule "Less Than or Equal 10 Employee" dialect "mvel" when company : CompanyFact($listOfEmployees: employees) employee : EmployeeFact(departmentType == "HR") from $listOfEmployees then company.setDepartmentBand("ABC"); end

只有当部门是 HR 时,才会出现相同的结果,而我正在寻找是否有超过 10 名来自 HR 的员工只将乐队指定为“ABC”

您使用 accumulatecollect,具体取决于您的情况有多复杂。

rule "More than 10 HR employees"
when
  company: CompanyFact($listOfEmployees: employees)
  List(size > 10) from collect(EmployeeFact(departmentType == "HR") from $listOfEmployees)
then
  company.setDepartmentBand("ABC");
end

我在此示例中使用了 collect,因为它是一个简单的“获取子集”。如果您想获得一组属性 average/max/mean 或更复杂的东西,您可以使用 accumulate.