Drools列出迭代问题

时间:2015-10-06 13:51:51

标签: java list drools

   rule "typeChild should be unique"
when
    RuleActivator( targetMessage == "QWERTY" )
    $o:  Parent()
    $o2: ListGeneric(typeChild != null) from $o.getDetails()
$o3: ListGeneric(typeChild != null && (typeCode == $o2.typeCode)) from $o.getDetails()
then
    insert(new ValidationError(ValidationUtil.qualifyField($DECL_ROOT, $o3, "typeChild"), "UNIQUE"));end

如果ListGenric中的任何typeChild相同,我想触发规则。 详细信息是Parent()bean中的列表,如下所示:

protected List<ListGeneric> details;

还有它的制定者和吸气剂。 我现在遇到的问题是,它开始比较列表中的第一个项目,并且始终是相同的。因此,它每次都会触发规则。 那么,如何在其中插入计数,如果它比较两次然后应该触发规则? 或者,如果还有其他更好的解决方案,请推荐。

1 个答案:

答案 0 :(得分:0)

您需要测试是否存在具有特定typeCode的第二个ListGeneric。

rule "typeChild should be unique"
when
  RuleActivator( targetMessage == "QWERTY" )
  $o:  Parent()
  $lg: ListGeneric( typeChild != null, $tc: typeCode ) from $o.getDetails()
  exists ListGeneric( typeChild != null,
                      this != $lg,
                      typeCode == $tc ) from $o.getDetails()
then
  // duplicate typeCode $tc
end

请注意this != $lg确定两个ListGeneric对象不同。

可能有多个重复的类型代码,规则将为每个代码触发一次。