如何从 Drools 的列表中获取最大最小项目
How to get max min item from a list in Drools
我有一个class
class Person {
public Date dateOfBirth;
public List<Person> children;
}
我想创建一个让我成为最老 child 的 Drools 规则。例如:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
then
insert($oldestChild)
end
正如所写,$oldestChild 是一个列表,但我真的很想成为真正最老的 child(单个 object 而不是列表)。我玩了一下 accumulate ,但无法让它发挥作用。有什么想法吗?
使用内联自定义代码的累积生成最老的子项:
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 中)- 它的工作量更大,但 "cleaner" 解决方案。请参阅文档。
另一种不累积的方式:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
not Person(dateOfBirth > $oldestChild.dateOfBirth) from $person.children
then
insert($oldestChild)
end
我认为这个解决方案可能比 Laune 的性能更差。
我有一个class
class Person {
public Date dateOfBirth;
public List<Person> children;
}
我想创建一个让我成为最老 child 的 Drools 规则。例如:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
then
insert($oldestChild)
end
正如所写,$oldestChild 是一个列表,但我真的很想成为真正最老的 child(单个 object 而不是列表)。我玩了一下 accumulate ,但无法让它发挥作用。有什么想法吗?
使用内联自定义代码的累积生成最老的子项:
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 中)- 它的工作量更大,但 "cleaner" 解决方案。请参阅文档。
另一种不累积的方式:
rule "Oldest Child"
when
$person: Person()
$oldestChild: Person() from $person.children
not Person(dateOfBirth > $oldestChild.dateOfBirth) from $person.children
then
insert($oldestChild)
end
我认为这个解决方案可能比 Laune 的性能更差。