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