Kotlin Map类型推断失败:使用两个字符串列表构建Map后访问键报错
问题根源
你对mutableMapOf的入参规则理解有误,这是报错的核心原因:
mutableMapOf()接收的参数是多个Pair<K, V>结构,每个Pair的第一个元素是单个Map键,第二个元素是该键对应的单个值- 你传入的是
Pair(initList, nameList),相当于你创建的Map泛型为MutableMap<MutableList<String>, MutableList<String>>:Map的唯一键是整个initList列表对象,对应值是整个nameList列表对象,完全不是你预期的键值均为String的Map - 你用String类型的
"BB"去查询键类型为列表的Map,类型完全不匹配,自然触发类型推断错误,就算手动指定键类型也无法解决底层类型不匹配的问题
正确实现方案
如果你要的是将两个列表同位置的元素分别作为Map的键和值,可以选择以下两种写法:
- 使用
zip函数快速合并转Map(推荐)
// 生成不可变Map val mapNames = initList.zip(nameList).toMap() // 如果需要可变Map,修改为如下写法 val mutableMapNames = initList.zip(nameList).toMap(mutableMapOf())
注意:使用前请保证两个列表长度一致,否则超出短列表长度的元素会被自动丢弃
- 手动遍历列表逐个添加
val mapNames = mutableMapOf<String, String>() // 保证两个列表长度一致的前提下遍历 for (index in initList.indices) { mapNames[initList[index]] = nameList[index] }
修改后你就可以正常用mapNames["BB"]或者mapNames.get("BB")查询对应值了。
内容的提问来源于stack exchange,提问作者IsaiahS
相关产品推荐
相关产品推荐

