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

2024-03-23

我有课

class Person {
    public Date dateOfBirth;
    public List<Person> children;
}

我想制定一条流口水规则,让我成为最大的孩子。例如:

rule "Oldest Child"
    when
        $person: Person()
        $oldestChild: Person() from $person.children
    then
        insert($oldestChild)
end

正如所写, $oldestChild 是一个列表,但我真的很想成为一个真正的最大的孩子(单个对象而不是列表)。我玩了一下“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)——它是更多的工作,但是是“更干净”的解决方案。请参阅文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Drools 列表中获取最大最小项目 的相关文章

随机推荐