在 Drools 中多次累积
Multi-accumulate in Drools
我有一个场景,我需要从相同的输入中累积两个不同的集合:
accumulate (ord : Order(type == A); $aSet : collectSet(ord))
accumulate (ord : Order(type == B); $bSet : collectSet(ord))
有没有办法只用一次积累就可以完成?
这是一个简单的例子,但在我的应用程序中,这两个累加中有很多相互条件,并且它似乎通过在相同条件下对相同数据迭代两次来做很多额外的工作。
性能方面,我似乎只想对记录进行一次迭代,并将不同的数据收集到不同的集合中。
有什么建议吗?
谢谢。
你可以自己写积累:
rule coll
when
$map: Map()
from accumulate( $o: Order( $t: type ),
init( Map m = new HashMap();
m.put( "A", new HashSet() );
m.put( "B", new HashSet() ); ),
action( ((Set)m.get( $t )).add( $o ); ),
reverse( ((Set)m.get( $t )).remove( $o ); ),
result( m ) )
then
System.out.println( $map.get( "A" ) );
System.out.println( $map.get( "B" ) );
end
我有一个场景,我需要从相同的输入中累积两个不同的集合:
accumulate (ord : Order(type == A); $aSet : collectSet(ord))
accumulate (ord : Order(type == B); $bSet : collectSet(ord))
有没有办法只用一次积累就可以完成? 这是一个简单的例子,但在我的应用程序中,这两个累加中有很多相互条件,并且它似乎通过在相同条件下对相同数据迭代两次来做很多额外的工作。
性能方面,我似乎只想对记录进行一次迭代,并将不同的数据收集到不同的集合中。
有什么建议吗?
谢谢。
你可以自己写积累:
rule coll
when
$map: Map()
from accumulate( $o: Order( $t: type ),
init( Map m = new HashMap();
m.put( "A", new HashSet() );
m.put( "B", new HashSet() ); ),
action( ((Set)m.get( $t )).add( $o ); ),
reverse( ((Set)m.get( $t )).remove( $o ); ),
result( m ) )
then
System.out.println( $map.get( "A" ) );
System.out.println( $map.get( "B" ) );
end