簡體   English   中英

在Kotlin中映射JsonNode數組的值

[英]Map values of JsonNode arrays in Kotlin

我有兩個JsonNode對象,它們是從API調用返回的數組,看起來像這樣

exportedNodeArray:

[
    {"key":"111", "value":"aaa"},
    {"key":"222", "value":"bbb"},
    {"key":"333", "value":"ccc"}
]

localNodeArray

[
    {"key":"999", "value":"aaa"},
    {"key":"888", "value":"bbb"},
    {"key":"777", "value":"ccc"}
]

所需的輸出是任何鍵的Map,它對應於每個數組中的相同值。 這些值保證在數組中是唯一的。

"111"="999"
"222"="888"
"333"="777"

此函數返回正確的結果,但似乎是一種非常優雅的方式。

fun mapIds(exportedNodeArray: JsonNode, localNodeArray: JsonNode) : MutableMap<String, String?> {
    val localMap = mutableMapOf<String, String>()
    localNodeArray.forEach {
        localMap[it["value"].asText()] = it["key"].asText()
    }
    val idMap = mutableMapOf<String, String?>()
    exportedNodeArray.forEach {
        idMap[it["key"].asText()] = localMap[it["value"].asText()]
    }
    return idMap
}

我是Kotlin的新手,想了解更實用的方法。 特別是如果有一種方法可以通過屬性值訪問JsonNode的元素,並在單個循環或地圖調用中完成此操作。

如果再定義一個函數,它可能如下所示:

fun mapIds(exportedNodeArray: JsonNode, localNodeArray: JsonNode) : Map<String, String> {
    val localConverted = convert(localNodeArray)
    return convert(exportedNodeArray)
        .filterKeys(localConverted::containsKey)
        .map { it.value to localConverted.getValue(it.key) }
        .toMap()
}

fun convert(node: JsonNode): Map<String, String> = node.associate {
    it["value"].asText() to it["key"].asText() 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM