我有一个对象"父母"其中包含" 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
答案 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