在 Kotlin 中将 Map<String, Any> 转换为 Map<String, String>?

Convert Map<String, Any> to Map<String, String> in Kotlin?

我有一个数据库,我从中检索数据并将其存储在 Map 集合中。

在日志中打印时看起来像这样:

{-MxY_3dqegF7YmP-NEaE8={Factors={Percentage=52.89, Got Stuff=0, Happy=1}, Result=Ok, Probability=50}}

这看起来不错,在 Python 我会知道如何处理它,因为它就像一本字典,但问题是内部键和值是 Kotlin 中的 Any 类型对象。

我无法使用该类型并遍历键和列表。我只能将数据打印为字符串,但我只知道这些:

    val values = snapshot.getValue<Map<String, Any>>()
    Log.d("[CLIENT]", "Value is: $values")
    
    var keys = mutableListOf<String>()
    var data = mutableListOf<Any>()
    
    if (values != null) {
        for ((k, v) in values) {
            keys.add(k)
        }
    }
    
    val check = values?.get(keys[0])
    Log.d("[CLIENT]", "Key is: $check")

它会像这样打印 check

{Factors={Percentage=52.89, Got Stuff=0, Happy=1}, Result=Ok, Probability=50}

checkAny? 类型,那么如何转换它或像 Map 一样使用它,或使用其他更简单的方法, 类似于 like maybe Python Dictionaries?

想通了,简单的类型转换。抱歉,语言新手。

val check = values?.get(keys[0]) as Map<String, String>

这里唯一的问题是一个警告说它是一个未经检查的转换,但我还没有弄清楚如何安全地进行转换,如果你知道请告诉我。目前它可以工作,因为我知道数据类型。

根据 IDE:

的建议,这也可以在没有警告的情况下工作
val check = values?.get(keys[0]) as Map<*, *>

回答您将 Map<String, Any> 转换为 Map<String, String> 的问题标题:

val values = hashMapOf<String, Any>("Foo" to 7, "Bar" to true)
val casted = values.map { e -> e.key to e.value.toString() }.toMap()

虽然我不认为那是你想要的,因为你似乎有 Map<String, Map<String, Any>>