[英]How to get max min item from a list in Drools
我上课了
class Person {
public Date dateOfBirth;
public List<Person> children;
}
我想创建一个Drools规则,让我成为最大的孩子。 例如:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
then
insert($oldestChild)
end
如上所述,$ oldestChild是一个列表,但我真的想成为一个真正最老的孩子(单个对象而不是列表)。 我玩了一会儿累积了但是无法让它发挥作用。 有任何想法吗?
使用内联自定义代码的累积会生成最大的子代:
rule "oldest child"
when
Person($pn: name, $pd: dateOfBirth, $children: children)
Person($ocn: name) from accumulate(
$child: Person( $cd: dateOfBirth) from $children,
init( Person minp = null; Date mind = new Date(); ),
action( if( $cd.compareTo( mind ) < 0 ){
minp = $child;
mind = $cd;
} ),
result( minp ) )
then
System.out.println( $pn + "'s oldest child is " + $ocn );
end
你可以实现自己的累积功能(用Java),如果你需要这个来进行认真的工作 - 这是更多的工作,但“更清洁”的解决方案。 查看文档。
另一种没有积累的方式:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
not Person(dateOfBirth > $oldestChild.dateOfBirth) from $person.children
then
insert($oldestChild)
end
我认为这个解决方案可能会比劳恩的表现差。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.