Kotlin- 没有从 either.eager 块中获取参数值

Kotlin- not getting the value of params from either.eager block

我想知道如何通过覆盖现有对象上的一些键值来创建新的 jsonObject。在我的例子中,我有一个 jsonObject existingData 和一个类型为 Map.

order
// order is of type Map<String, Any?>
val keys = listOf("service", "customerContact", "deliveryAddress", "deliveryZipCode", "deliveryZipArea", "deliveryCountryCode", "deliveryPhoneNumber")
val newObject = existingData
  .toMap()
  .foldLeft(jsonObject()) { acc, entry ->
    if (relevantKeys.contains(entry.key)
        && !matching(entry.value, order.get(entry.key))
    ) acc.set(entry.key, order?.get(entry.key).toString())
    else acc.set(entry.key, entry.value.asString)
  }

所以,在这里我需要检查 keys 列表是否包含 jsonObject 上的键,以及对象上该键的值是否与 order Map 条目的值不同.如果它们不匹配,则应使用 order Map 中的值更新对象上的键。我该怎么做,在js中我会使用reduce,但我对kotlin不太熟悉,而且由于我们不能在JsonObject上使用fold,我想知道我该如何做这样的事情?

如果我没理解错的话,你就是想要这个:

val newObject = existingData.deepCopy().apply {
    for (key in relevantKeys) {
        add(key, Gson().toJsonTree(order[key]))
    }
}
如果密钥已经存在,

add 将覆盖旧值。 toJsonTreeAny? 转换为 JsonElement。这是假设 order 中的内容可以转换为 JSON 而无需任何更多类型信息。