Kotlin:将类型MutableList〈java.util.HashMap〈Int,Int>更改为kotlin.collections.HashMap〈Int,Int>

lf5gs5x2  于 2023-01-13  发布在  Kotlin
关注(0)|答案(2)|浏览(148)

我想学习Kotlin,并尝试将多个对象(每个对象管理两个int)转移到一个列表(该列表管理两个int的散列表)中。
这是新对象:

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

这是旧对象:

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

我有一张旧物品的清单:

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>>

我怎样才能解决这个问题?

lrl1mhuk

lrl1mhuk1#

另一种方法就是

val result = oldObjects.map { oldObj -> hashMapOf(oldObj.a to oldObj.b) }
    .toMutableList()
svgewumm

svgewumm2#

这个问题看起来有点混乱,但我怀疑真正需要的是一个从Int到Int的Map。 实现这个Map的最简单(也是最有效)的方法之一是:

val result = oldObjects.associate{ it.a to it.b }

这给出了一个Map<Int, Int>,其中每个原始OldObject都有一个条目 (需要注意的是,如果多个OldObject有相同的键,那么只有最后一个OldObject才会包含在结果中。 如果在这种情况下需要保存所有OldObject,那么map就不是正确的结构)。
(If你需要结果是可变的,然后你可以在它上面调用toMutableMap()--但是通常在可能的情况下坚持不变的对象会更简单和安全。)

相关问题