Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Drools:如何获取具有唯一ID的项目列表_List_Unique_Drools_Items - Fatal编程技术网

List Drools:如何获取具有唯一ID的项目列表

List Drools:如何获取具有唯一ID的项目列表,list,unique,drools,items,List,Unique,Drools,Items,我有一个复杂的物体在流口水。 对象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(

我有一个复杂的物体在流口水。 对象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。
集合
将为您消除重复项(假设您的ID执行了相应的身份和平等性检查):

注意,我在同一模式中包含了对集合大小的评估。您不需要为此使用额外的
eval


希望有帮助,

我相信我可以为这个实体添加equals()和hashCode(),但需要检查其余的代码。我对更通用的解决方案非常感兴趣。这种规则在我们的系统中会经常出现。收集一个对象列表,然后根据一个或多个字段的值将其中一些对象拉入另一个列表。我想我需要一个映射或类似的东西,但在Drools中,我无法将映射与对象的初始集合合并到一个列表中。一个选项是为您的特定需要创建自己的“自定义累积函数”库。在本节文档中,您可以阅读更多关于可插拔累积函数的信息:
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