2016-01-06 23 views
0

我正在嘗試在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個窗口的房屋。

但是這段代碼有問題。我得到這個錯誤:

Unable to Analyse Expression values (House (windows = 3)): java.lang.Class cannot be cast to org.mvel2.util.MethodStub]

有人可以幫忙嗎? 在此先感謝。

+0

HashMap的外觀如何?該映射值可通過此語法訪問[http://stackoverflow.com/a/9095266/3710490](http://stackoverflow.com/a/9095266/3710490) – Valijon

+0

我的地圖是:HashMap > 。 但我不想搜索特定的密鑰。我需要搜索地圖的所有LinkedLists。該鏈接顯示我如何使用密鑰進行搜索。 –

+0

你可以發佈完整的drools'.drl'文件嗎?似乎有些課程進口是錯誤的... – Valijon

回答

0
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 

您需要解開散列映射中值的列表。然後你可以檢查結果列表中有三個窗戶的房屋。

由於您沒有提供設置演示的所有代碼,因此此規則未經測試。