繁体   English   中英

如何从Drools中的列表中获取最大最小项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM