在 DRL 文件中完成 Arraylist 迭代后调用 Drools Agenda

Calling Drools Agenda after completion of iteration of Arraylist in DRL file

我正在迭代 DRL 文件中的列表。我需要在循环完成后调用新议程。但是以下代码为所有迭代调用议程 "B to C"

rule "Difference in offsets"
dialect "java"
lock-on-active
when
    $notification : NotificationVO()
    wtOffset:Integer() from $notification.getWeightOffset();
then
    System.out.println("Hello loop1");
    $notification.getOffsetChngesInterval().
    add((wtOffset-$notification.getInitialOffset()));
    update($notification);
    drools.setFocus("B to C");

rule "Last activity"
   dialect "java"
   salience 2
    no-loop true
    auto-focus false
    agenda-group "B to C"
when
     $notification:NotificationVO
     ($notification.getOffsetChngesInterval()!=null)
then
    System.out.println("Rule2---"+
    $notification.getOffsetChngesInterval().size());
end

在上面的代码中,我只想在完成 $notification.getWeightOffset();.

的迭代后才关注议程组 "B to C"

两条评论。 (1) 规则属性的大量使用是要避免的。 (2) 规则 "Difference in offsets" 实现了一种程序范式:将一个列表的元素映射到另一个列表。

就是说,我会在规则右侧计算 "changes intervals",当 "weight offsets" 多于 "changes intervals" 时触发。 (我猜这是一个很好的条件。)

rule "Difference in offsets"
dialect "java"
when
  $ntf: NotificationVO( weightOffset.size() > offsetChngesInterval.size(),
                        $initOff: initialOffset )
then
  for( Integer ioff: $ntf.getWeightOffset ){
    $ntf.getOffsetChngesInterval().add(ioff - $initOff );
  }
  update( $ntf );
  System.out.println( $ntf.getOffsetChngesInterval().size());
end