我正在尝试模拟多图,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])
}
提前致谢。
答案 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])
}