在Drools中多累积

时间:2015-02-03 13:37:09

标签: drools

我有一个场景,我需要从同一个输入中累积两个不同的集合:

accumulate (ord : Order(type == A); $aSet : collectSet(ord))
accumulate (ord : Order(type == B); $bSet : collectSet(ord))

有没有办法只用一次积累来完成它? 这是一个简单的例子,但在我的应用程序中,这两个累积中存在很多相互条件,并且看起来它通过在相同条件下对相同数据迭代两次来完成大量额外工作。

在性能方面,我似乎只想在记录上迭代一次,并将不同的数据收集到不同的集合中。

有什么建议吗?

感谢名单。

1 个答案:

答案 0 :(得分:1)

你可以写自己的累积:

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