我正在尝试使用 drools 规则引擎中定义的一组规则对对象列表进行排序。 示例对象结构如下
public class A {
String name;
Date createdDate;
}
我想要
定义一组用于对对象列表进行排序的规则。
例如:规则 1:“使用名称升序对对象进行排序”
规则2:“使用createdDate降序对对象进行排序”定义规则需要执行的顺序。
例如:将顺序 1 设置为规则 1
将顺序 2 设置为规则 2
因此,对象将按名称升序和创建日期降序排序。
我可以使用 drools 引擎实现此目的吗?
我想过使用compareTo()进行排序,但由于排序标准可以改变
在运行时逻辑变得复杂且难以维护。
谢谢,
Kolitha。
最佳答案
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 - 使用 Drools 规则引擎对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602564/