2017-04-16 9 views
0

マルチマップをシミュレートしようとしていますが、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アクションの結果を追加すると、ブール値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]) 
} 
関連する問題