从Drools中的列表中查找最小日期

时间:2016-03-24 05:20:48

标签: drools

我有一个对象"父母"其中包含" Item"的列表对象。每个"项目"有一个发货日期。如何从"项目"列表中找到最短发货日期。对象?我使用的是Drools 6.2.0。

class Parent{
    List<Item> items;
    // Getter / Setter
}

class Item{
    Date shipDate();
    // Getter / Setter
}

我尝试了一个规则,但它抛出异常。我很确定我离开了。这就是我现在所拥有的:

rule "Print min ship date"
    when
        $parent : Parent( $items:getItems() && null != $items)
        $minShipDate : Date() from accumulate(($item : Item ($shipDate : getShipDate()) from $items), 
                                    min($shipDate)) 
    then
        System.out.println("Min ship date is "+minShipDate); 
end

这是我得到的例外:

 java.lang.ClassCastException: org.drools.compiler.lang.descr.OrDescr cannot be cast to org.drools.compiler.lang.descr.PatternDescr

1 个答案:

答案 0 :(得分:1)

即使修复了语法错误,此规则也不会引发问题中所述的异常。

但是有一个问题:Drools无法在accumulate的min和max函数中处理java.util.Date。人们必须采用一种有点乏味的解决方法:

rule "Print min ship date"
when
    $parent: Parent( $items: items != null )
    accumulate( Item( $shipDate: shipDate ) from $items, 
                $msd: min($shipDate.getTime()) ) 
then
    System.out.println("Min ship date is " + new Date($msd.longValue())); 
end