【问题标题】:Drools Search Map ValuesDrools 搜索地图值
【发布时间】:2016-01-06 14:55:11
【问题描述】:

我正在尝试在 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

我要做的是:检查 HashMap 中是否有任何带有 3 个窗口的房屋。如果没有// Do something。 为此,我试图访问 obj1.getHouses(),它是一个 HashMap >。然后我正在检查这个 HashMap 值,并为有 3 个窗口的房屋过滤它。

但是这段代码有问题。我收到此错误:

无法分析表达式值(House (windows = 3)): java.lang.Class 不能转换为 org.mvel2.util.MethodStub]

有人可以帮忙吗? 提前致谢。

【问题讨论】:

  • 你的HashMap是什么样子的?通过此语法http://stackoverflow.com/a/9095266/3710490 访问映射值
  • 我的地图是:HashMap >。但我不想搜索特定的键。我需要搜索地图的所有链接列表。该链接向我展示了如何使用键进行搜索。
  • 你能发布完整的流口水.drl 文件吗?似乎某些类导入是错误的......

标签: java dictionary drools


【解决方案1】:
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

您需要解开作为哈希映射中值的列表。然后,您可以检查结果列表中是否有具有三个窗户的房屋。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多