2017-04-16 3 views
0

Ich versuche, eine Multimap zu simulieren, jeder Wert von langVarMap ist eine Liste. Wenn ich einen neuen String in die Liste aufzunehmen, ich die folgende Fehlermeldung erhalten:Fehler beim Hinzufügen eines Elements zur neuen ArrayList in Groovy

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

Hier wird das Snippet-Code ist:

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]) 
        } 

Vielen Dank im Voraus.

Antwort

1

Problem ist mit dieser Zeile:

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

ArrayList.add(E e) kehrt nicht die Liste boolean. Das Hinzufügen des Ergebnisses der Aktion add fügt der Map einen booleschen Wert TRUE hinzu, nach dem die Methode add nicht mehr aufgerufen werden kann. Muss wie folgt umgeschrieben werden:

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]) 
} 

Und kann mit diesem weiter verfeinern, um die redundante Suche zu entfernen.

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