如何使用accumulate进行多次操作和收集

时间:2015-05-11 16:53:18

标签: java drools

我使用以下规则来获取两个收集列表。

rule "base"
    when
        $priceLineItem : PriceLineItem( $grade : grade , $style : style  ,$prefix : prefix , basePrice == null  )
    then
end

rule "check-multiple instance-on-cover-type" extends "base"
    when
        accumulate (
                    $basePriceUpchargeConfig : BasePriceUpchargeConfig( 
                                                prefix contains $prefix,
                                                style contains $style,
                                                $baseCoverType : baseCoverType 
                                            )
                     and
                     $c : CoverUpChargeConfig( 
                                                baseCoverType contains $baseCoverType.get(0),
                                                gradeOrder contains $grade,
                                                prefix  contains $prefix,
                                                style  contains $style
                                           );
                     $collectList : collectList($c) )
            accumulate (
                    $basePriceUpchargeConfig : BasePriceUpchargeConfig( 
                                                prefix contains $prefix,
                                                style contains $style,
                                                $baseCoverType : baseCoverType 
                                            )
                     and
                     $c : CoverUpChargeConfig( 
                                                baseCoverType contains $baseCoverType.get(0),
                                                gradeOrder contains $grade,
                                                prefix  contains $prefix,
                                                style  contains $style
                                           );
                     $collectList1 : collectList($basePriceUpchargeConfig) )

    then
        System.out.println($collectList);
        System.out.println($collectList1);
end

我想要CoverUpChargeConfig和BasePriceUpchargeConfig对象的列表。

  1. 对于每个BasePriceUpchargeConfig;会有多个或恰好一个CoverUpChargeConfig对象。如果两个对象之间只有一对一的话;我想在规则的这一部分中使用它。

  2. 如果BasePriceUpchargeConfig中有一对多匹配 - > CoverUpChargeConfig;我想知道CoverUpChargeConfig对象的数量。

  3. 我能够以上述方式获得它,但我正在使用两个累积。

    请帮忙。 感谢

1 个答案:

答案 0 :(得分:1)

你可以在相同的累积CE中收集两个列表 - 我没有看到配对BasePriceUpchargeConfig和CoverUpChargeConfig的两个累积有任何差异。

rule "check-multiple instance-on-cover-type" extends "base"
when
accumulate ( $b: BasePriceUpchargeConfig( 
             prefix contains $prefix,
             style contains $style,
             $baseCoverType : baseCoverType  )
             and
             $c : CoverUpChargeConfig( 
             baseCoverType contains $baseCoverType.get(0),
             gradeOrder contains $grade,
             prefix  contains $prefix,
             style  contains $style );
            $collectList1 : collectList($b)
            $collectList : collectList($c) )