我有以下事实
declare PriceInfo
price : Integer
end
我正在使用此规则插入:
规则“插入” 议程小组“寻找轮换的房子” 当
then
PriceInfo p1 = new PriceInfo();
PriceInfo p2 = new PriceInfo();
PriceInfo p3 = new PriceInfo();
PriceInfo p4 = new PriceInfo();
PriceInfo p5 = new PriceInfo();
p1.setPrice(200);
p2.setPrice(300);
p3.setPrice(400);
p4.setPrice(500);
p5.setPrice(600);
insert(p1);
insert(p2);
insert(p3);
insert(p4);
insert(p5);
end
这会将PriceInfo的5个事实插入到规则引擎中。 我试图按照这条规则按升序或降序对其进行排序。
rule "sort-number"
agenda-group "find-rotated-house"
when
$priceInfo : PriceInfo( $price : price)
not PriceInfo(price < $price)
then
$logger.info($priceInfo.toString());
retract($priceInfo);
end
然而,在这条规则中,我正在收回这个事实。如果我没有撤回,我将获得最低价值,即200.其他事实未激活。 我希望在排序后保持RE中的完整性。
这条规则也有效,但撤回。
rule "sort-number-1"
agenda-group "find-rotated-house"
when
Number($intValue : intValue ) from accumulate( PriceInfo( $price : price), min($price) )
$p : PriceInfo( price == $intValue)
then
$logger.info($p.toString());
retract($p);
end
请帮忙。
由于
答案 0 :(得分:1)
一个好的答案取决于您需要的排序顺序,是否需要在最终插入时进行维护,修改(价格确实更改)和删除,是否必须重复使用等等。
这是一种可能性:
rule "sort price info"
when
$list: ArrayList() from collect( PriceInfo() )
then
$list.sort( ... ); // use suitable Comparator
end
现在您有一个PriceInfo对象的排序列表。
您可以将此列表包装到对象中并将其作为事实插入。这可能会让您编写诸如
之类的规则rule "10 cheap ones"
when
$p: PriceInfo()
PriceList( $l: list )
eval( $l.indexOf($p) < 10 )
then ... end