无法在Groovy中将元素添加到新的ArrayList

无法在Groovy中将元素添加到新的ArrayList,groovy,Groovy,我试图模拟一个多重映射,langVarMap的每个值都是一个列表。向列表中添加新字符串时,出现以下错误: 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 = [:]

我试图模拟一个多重映射,langVarMap的每个值都是一个列表。向列表中添加新字符串时,出现以下错误:

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 = (model.@language.text())   // String
                    def variant = (model.@variant.text()) // 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])
                    }
以下是代码片段:

  def langs = engine.languages as Set
                def langVarMap = [:] 
                engine.models.each { model -> 
                    def lang = (model.@language.text())   // String
                    def variant = (model.@variant.text()) // 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])
                    }

提前感谢。

这一行的问题是:

  def langs = engine.languages as Set
                def langVarMap = [:] 
                engine.models.each { model -> 
                    def lang = (model.@language.text())   // String
                    def variant = (model.@variant.text()) // 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])
                    }
langVarMap.put(lang, a.add(variant))
返回布尔值,而不是列表。添加“添加”操作的“添加结果”会将布尔值TRUE添加到映射,之后无法对其调用add方法。需要重写如下内容:

  def langs = engine.languages as Set
                def langVarMap = [:] 
                engine.models.each { model -> 
                    def lang = (model.@language.text())   // String
                    def variant = (model.@variant.text()) // 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])
                    }
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 langs = engine.languages as Set
                def langVarMap = [:] 
                engine.models.each { model -> 
                    def lang = (model.@language.text())   // String
                    def variant = (model.@variant.text()) // 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])
                    }
def a = langVarMap.get(lang)  //ArrayList
if (a) {
 a.add(variant)
} else {
 langVarMap.put(lang, [variant])
}