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

时间:2017-04-16 15:29:01

标签: groovy

我正在尝试模拟多图,langVarMap的每个值都是一个列表。当我向列表中添加一个新的String时,出现以下错误:

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

提前致谢。

1 个答案:

答案 0 :(得分: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])
}