[英]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.