You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin类型不匹配问题:如何将OldObject列表转为HashObject?

Kotlin类型不匹配问题解决:OldObject列表转HashObject

我正在学习Kotlin,尝试将多个各自管理两个Int值的OldObject对象转换为一个包含HashMap<Int, Int>列表的HashObject对象。

新对象定义:

public class HashObject(val maps: MutableList<HashMap<Int, Int>>){  
    ...  
}   

旧对象定义:

public class OldObject(  
    val a: Int,  
    val b: Int  
)  

我拥有一个OldObject对象列表:

val oldObjects: List<OldObject> = ...   

尝试的转换代码:

val hashObjects = mutableListOf<HashMap<Int, Int>>()  
for(obj in oldObjects){  
   hashObjects.add(hashMapOf(obj.a to obj.b))    
val result = HashObject(maps = hashObjects)  

出现的错误:

Type mismatch.
    Required: kotlin.collections.HashMap<Int, Int> /* = java.util.HashMap<Int, Int> */
    Found: MutableList<java.util.HashMap<Int, Int>>

问题原因与修复

你的核心转换逻辑是正确的,但存在语法错误:for循环缺少闭合的大括号},导致编译器解析混乱,误报类型不匹配。

修复后的代码:

val hashObjects = mutableListOf<HashMap<Int, Int>>()  
for(obj in oldObjects){  
    hashObjects.add(hashMapOf(obj.a to obj.b))  
} // 补上闭合大括号
val result = HashObject(maps = hashObjects)  

更简洁的Kotlin风格写法

可以用map函数替代手动循环,代码更简洁易读:

// 将每个OldObject转换为HashMap,再转成MutableList
val hashMaps = oldObjects.map { hashMapOf(it.a to it.b) }.toMutableList()
val result = HashObject(maps = hashMaps)

如果HashObject的构造参数允许接收List<HashMap<Int, Int>>而非必须MutableList,还可以省略toMutableList()进一步简化:

val hashMaps = oldObjects.map { hashMapOf(it.a to it.b) }
val result = HashObject(maps = hashMaps)

内容的提问来源于stack exchange,提问作者Ajipani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:35:35