当前位置: 首页 > 知识库问答 >
问题:

使用Drools规则引擎对对象列表进行排序

柯乐童
2023-03-14

我正在尝试使用drools规则引擎中定义的一组规则对对象列表进行排序。示例对象结构如下

public class A {

   String name;
   Date createdDate;

}

我想要

>

  • 定义一组对对象列表进行排序的规则。
    例如:规则1:“使用名称升序对对象进行排序”

    定义规则需要执行的顺序
    例如:将顺序1设置为规则1

    我可以使用drools引擎实现这一点吗
    我曾想过使用compareTo()进行排序,但由于排序标准可以在运行时更改,因此逻辑变得复杂且难以维护。

    谢谢,
    Kolitha。

  • 共有2个答案

    孔茂
    2023-03-14

    这是对口水进行分类的方法。

    rule "Rule 03"
        when
            $number : Number( )
            not Number( intValue < $number.intValue )
        then
            System.out.println("Number found with value: " + $number.intValue() ); 
            retract( $number );
    end
    
    钱雅逸
    2023-03-14

    Drools不会像快速排序或类似排序算法那样在数组或其他聚合中重新排列对象。您可以做的是,从一组事实(例如您的a类对象)中为每个事实重复触发一次规则,并使用约束来保证按特定顺序发生。此外,您还需要跟踪已处理的事实。

    因此,首先要回答的问题是:为什么需要按一定顺序排列对象?

    如果事实需要按此顺序处理,您不必按照通常意义上的单词对其进行排序,上述规则就足够了:

    declare ListOfA
        listOfA: List
    end
    
    rule noListOfA
    when
        not ListOfA()
    then
        ListOfA loa = new ListOfA();
        loa.setListOfA( new ArrayList() );
        insert( loa );
    end
    
    rule sortA
    when
        $a: A( $name: name, $createdDate: createdDate )
        $loa: ListOfA( $listOfA: listOfA not contains $a )
        not A( this != $a, this not memberOf $listOfA,
                           name < $name ||
                           name == $name && createdDate > $createdDate )
    then
        System.out.println( $a );
        modify( $loa ){ getListOfA().add( $a ) }
    end
    
     类似资料:
    • 我在试着处理drools中的列表。我正在传递一个请求,其中包含一个购买列表。我想做几个规则,包括检查大小是否正确,然后如果所有元素都相同,如果所有购买都经过授权。。。我有以下代码,但在使用列表时遇到了问题。这是正确的方法吗?尤其是在检查尺寸时?

    • 我使用Kie Workbench学习口水。我的输入将是opportunityProduct类中的名称,我希望在Opportunity类中的Ip中得到输出。在规则引擎执行之后,我在输出中只得到null值。 Pojo结构: 输入: 输出: 决策表: Drl: 我无法确定我的输入是否错误或决策表中的条件是否错误。

    • 我正在向drools规则引擎插入数据,但我无法理解它是如何处理插入的数据的。插入数据的代码是:

    • 我有这样的情况,在规则文件中的所有规则必须检查执行。如果我的理解是正确的,文档所说的规则将由引擎任意执行。 我有一个或多个疑问。 > 我在许多地方得到了答案,我必须使用显著性功能来按顺序执行它们。如果我使用显著性,并且我有执行所有规则的要求,它真的会大规模地影响性能吗?如果是,它会如何影响性能,甚至规则引擎也会任意执行所有规则,比如一些随机顺序。 提前谢谢。

    • 我有一个学生班,它有相关部门的列表。 我正在尝试用Drools编写规则。规则就像-如果一个学生属于某些部门,那么就采取行动。我无法找出正确的方法来做这件事。我在下面写的一个不起作用。我知道如果它的字符串列表有效。有没有办法在自定义对象上做包含。 终止 调用规则的代码 我正在使用Drools 6.2版本。

    • 我有一个过程对象列表,如下所示 我的程序课就像 我想基于以下条件对对象进行排序和分组。 应根据过程名称对所有过程进行分组。 过程必须按过程日期降序排列。[日期列表中的第一个元素,即 分组在一起的相同过程应按日期降序排列。 最终结果必须是, 我能够使用比较器和旧的Java代码实现这一点。是否可以使用java8流、收集器和分组来实现相同的功能?