首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kotlin-未从either.eager块获取参数的值

Kotlin-未从either.eager块获取参数的值
EN

Stack Overflow用户
提问于 2021-10-13 17:46:27
回答 1查看 28关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
// 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映射条目的值不同。如果它们不匹配,则应使用order Map中的值更新对象上的键。在js中我会使用reduce,但我对kotlin不是很熟悉,而且由于我们不能在JsonObject上使用fold,我想知道如何做这样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 18:35:48

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

代码语言:javascript
代码运行次数:0
运行
复制
val newObject = existingData.deepCopy().apply {
    for (key in relevantKeys) {
        add(key, Gson().toJsonTree(order[key]))
    }
}

如果键已经存在,add将覆盖旧值。toJsonTreeAny?转换为JsonElement。这是假设order内部的东西可以在没有更多类型信息的情况下转换成JSON。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69560072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档