如何在 Kotlin 中将原始 Map 安全转换为 Map<String, List<Int>>?

问题描述 投票:0回答:1

我需要一个将

Map
转换为
Map<String, List<Int>>

的函数

目前我使用不安全的“as”,但我收到了关于它的合理警告。我想修复它。

对于列表部分,我能够实现功能

inline fun <reified T : Any> List<*>.checkItemsAre(): List<T> {
    return this.filterIsInstance<T>().takeIf { it.size == this.size }
        ?: throw IllegalArgumentException("Can't convert raw List to type safe List")
}

但我无法资助地图的模拟。

我该如何修复它?

kotlin dictionary generics casting type-safety
1个回答
0
投票

如果您正在寻找类似于您展示的

checkItemsAre
List
的内容,您可以为
Map
s 编写这样的方法。

inline fun <reified K : Any, reified V: Any> Map<*, *>.checkKeyValuesAre() =
    entries.associate {
        Pair(
            (it.key as? K) ?: throw IllegalArgumentException(),
            (it.value as? V) ?: throw IllegalArgumentException()
        )
    }

就像

checkItemsAre
一样,如果所有键都是Map类型并且所有值都是
K
类型,这会创建一个
new
V

© www.soinside.com 2019 - 2024. All rights reserved.