Java Drools搜索地图值

Java Drools搜索地图值,java,dictionary,drools,Java,Dictionary,Drools,我正在尝试建立一个关于流口水的规则。 我目前的代码是: rule "Test Rule #1" when obj1 : MyObject ( ) map : ArrayList (size < 1) from collect ( HashMap ( values ( House ( windows = 3) ) ) ) from obj1.getHouses() then // Do something end 规则“测试规则#1” 什么时候 对象J1:MyObject() ma

我正在尝试建立一个关于流口水的规则。 我目前的代码是:

rule "Test Rule #1"
when
 obj1 : MyObject ( )
 map : ArrayList (size < 1) from collect ( HashMap ( values ( House ( windows = 3) ) ) ) from obj1.getHouses()
then
  // Do something
end
规则“测试规则#1”
什么时候
对象J1:MyObject()
map:collect中的ArrayList(大小<1)(从obj1.getHouses()中的HashMap(值(House(windows=3)))
然后
//做点什么
结束
我想做的是:检查HashMap中是否有带3个窗口的房子。如果没有//做点什么。 为此,我尝试访问obj1.getHouses(),它是一个HashMap>。然后我检查这个HashMap值,并过滤有3个窗口的房子

但是这个代码有点问题。我得到了这个错误:

无法分析表达式值(豪斯(windows=3)): 无法将java.lang.Class强制转换为org.mvel2.util.MethodStub]

有人能帮忙吗? 提前谢谢

rule "find houses"
when
  obj1: MyObject()
  $fl: List() 
    from accumulate( $l: List(), 
        init( List flat = new ArrayList(); ),
        action( flat.addAll( $l ); ),
        result( flat ) )
      from obj1.getHouses().values()
  not House( windows == 3 ) from $fl
then
  //... $h is a house with three windows
end
您需要分解散列图中的值列表。然后,您可以检查带有三个窗口的房屋的结果列表


由于您没有提供设置演示的所有代码,因此此规则未经测试。

HashMap的外观如何?映射值通过以下语法访问:HashMap>。但我不想搜索特定的密钥。我需要搜索地图的所有链接列表。该链接向我展示了如何使用键进行搜索。你能发布完整的drools
.drl
文件吗?似乎有些类导入是错误的。。。