我试图使用drools规则引擎中定义的一组规则对对象列表进行排序。示例对象结构如下
public class A {
String name;
Date createdDate;
}我也想
我能用drools引擎实现这一点吗?
我曾想过使用compareTo()进行排序,但是由于排序条件可以在运行时更改,逻辑变得越来越复杂和难以维护。
谢谢,
Kolitha.
发布于 2014-12-22 16:34:16
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发布于 2016-06-30 21:06:57
这就是用口水分类的方法。
rule "Rule 03"
when
$number : Number( )
not Number( intValue < $number.intValue )
then
System.out.println("Number found with value: " + $number.intValue() );
retract( $number );
endhttps://stackoverflow.com/questions/27602564
复制相似问题