2017-04-16 108 views
0

我試圖模擬一個multimap,langVarMap的每個值都是一個列表。當我添加一個新的字符串到列表中,我得到以下錯誤:無法將元素添加到Groovy中的新ArrayList中

No signature of method: java.lang.Boolean.add() is applicable for argument types: (java.lang.String) values: [mm] 

這裏是代碼片段:提前

def langs = engine.languages as Set 
       def langVarMap = [:] 
       engine.models.each { model -> 
        def lang = ([email protected]()) // String 
        def variant = ([email protected]()) // String 
        langs.add(lang) 


       if (langVarMap.get(lang)) { 
        def a = langVarMap.get(lang) //ArrayList    
        langVarMap.put(lang, a.add(variant)) 
        } 
       else { 
        langVarMap.put(lang, [variant]) 
        } 

感謝。

回答

1

問題是這一行:

langVarMap.put(lang, a.add(variant)) 

ArrayList.add(E e)返回布爾不在名單。添加add動作的結果會向map添加一個布爾值TRUE,之後無法調用add方法。需要重寫如下:

if (langVarMap.get(lang)) { 
def a = langVarMap.get(lang) //ArrayList 
// a is already in langVarMap so don't need to put into ma again 
a.add(variant) 
} else { 
langVarMap.put(lang, [variant]) 
} 

而且可以進一步提煉以刪除冗餘查找。

def a = langVarMap.get(lang) //ArrayList 
if (a) { 
a.add(variant) 
} else { 
langVarMap.put(lang, [variant]) 
} 
相關問題