繁体   English   中英

Drools:如何获取具有唯一ID的商品的列表

[英]Drools: how to get a list with items with unique ids

我在Drools中有一个复杂的对象。 对象A包含对象B的列表。对象B包含对象C的列表。

对象C具有属性ID。 对象C可以出现在具有相同ID的不同对象B上。

我需要能够计算A中唯一ID的数量。

我的当前规则在ID不重复时有效。 但是,如何获取没有重复ID的listOfC?

rule CountCs
    dialect "mvel"
    when
       a : A( )

       listOfC: List( ) from accumulate (
           b : B( ) from a.bItems
           and
           c : C( ) from b.cItems;
           collectList( c )
       )
       eval( listOfC > 2)
    then
       // do whatever
    end

如果您只对事件的数量感兴趣,而对事件本身不感兴趣,则可以使用Set来收集ID。 Set将为您消除重复项(假设您的ID实现了相应的身份和相等性检查):

rule CountCs
dialect "mvel"
when
 a : A( )
 setOfC: Set( size > 2 ) from accumulate (
   b : B( ) from a.bItems
   and
   c : C( ) from b.cItems;
   collectSet( c.id )
 )
then
  // do whatever
end

请注意,我以相同的方式包含了对集合大小的评估。 您不需要为此使用额外的eval

希望能帮助到你,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM