从 Drools 中的集合中突破

Breaking from inside a collect in Drools

我是 Drools 的新手,如果这是基础知识,我深表歉意。但是如何在 collect 中间中断呢?例如,在下面的代码中

 c : Customer()
items : List( size == c.items.size ) 
      from collect( Item( price > 10 ) from c.items )

此代码检查是否所有商品的价格都 > 10。但是如果我想查看是否有任何商品的价格 > 10,我该怎么办?我可以将代码更改为 size > 0 而不是 size == c.items.size,但这仍然意味着收集遍历所有项目。如果任何项目符合收集中的条件,是否可以打破?

如果你只想检查是否存在,那么你可以使用exists运算符:

rule "Sample"
  c : Customer()
  exists Item( price > 10 ) from c.items
then
  //...
end

在这种情况下,您甚至不需要使用 collectfrom 关键字将 "loop" 覆盖集合中的所有项目。

您可以查看 Drools' Manual 以了解有关此条件元素的更多信息。

希望对您有所帮助,