当前位置: 首页 > 知识库问答 >
问题:

Kotlin-创建要列出的字符串的映射

令狐宣
2023-03-14

我有一个给定格式的JSON数据:

dataset = [
    { 'name': 'Sayantan', 'section': 'A', 'detail': 'complete' },
    { 'name': 'Charu', 'section': 'B', 'detail': 'complete' },
    { 'name': 'Sanhati', 'section': 'C', 'detail': 'inprogress' },
]

我想把它转换成地图

{'complete': [{'detail': 'complete', 'name': 'Sayantan', 'section': 'A'},
              {'detail': 'complete', 'name': 'Charu', 'section': 'B'}],
 'inprogress': [{'detail': 'inprogress', 'name': 'Sanhati', 'section': 'C'}]}

我在Kotlin方面没有太多经验,我主要用python处理过此类案例,我成功地编写了以下内容:

val mapOfInterest = mutableMapOf<String, List<DataResource>>()
for (data in datasets) {
  val mapKey = data.detail
  if (!mapOfInterest.containsKey(mapKey)) {
    if (mapKey != null) {
      mapOfInterest[mapKey] = listOf(data)
    } else {
      mapOfInterest[mapKey] // I am stuck here
    }
  }
}

我无法使用add()向地图键值添加数据,任何想法或线索都会有帮助,谢谢。

共有2个答案

郭琦
2023-03-14

在Kotlin中,集合在默认情况下是不可变的:https://kotlinlang.org/docs/collections-overview.html.所以列表没有add()方法。

您可以使用mutableListOf(),但正如Joffrey已经指出的那样,在Kotlin中使用标准函数groupBy()https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html

雍志新
2023-03-14

有一个stdlib函数可以满足您的需求:

val mapOfInterest = dataset.groupBy { it.detail }
 类似资料:
  • 我有一个给定格式的JSON数据: 我想把它转换成地图 我在Kotlin方面没有太多经验,我主要用Python处理过此类案例,我成功地编写了以下内容: 我无法使用将数据添加到地图键值,任何想法或线索都会有所帮助。

  • 问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如

  • 我需要将字符串转换为JSONObject

  • 问题内容: 我正在尝试分割字符串: 变成这样的列表: 我将如何去做呢? 问题答案: : 返回字符串中的单词列表,用作分隔符字符串。如果给出,最多 完成拆分(因此,列表最多 包含元素)。如果未指定,则分割数没有限制(进行所有可能的分割)。 如果指定,则连续的定界符不会分组在一起,而是视为定界空字符串(例如, return )。所述参数可以由多个字符(例如, 返回)。使用指定的分隔符分割空字符串将返回

  • 我想解组一个具有' 有没有办法在不使用替换/replace的情况下取消对字符串的排序?

  • 问题内容: 我需要创建一个将给定映射到的数组的静态对象。 换句话说,我想定义如下内容: 有没有简单的方法可以在Java中做到这一点? 而且,如果可能的话,我想同时为和值使用常量。 编辑: 为了澄清我的意思是值的常量,并给出我认为是正确的代码,这是我在解决方案中的第一个选项: 请注意,这些名称不是我实际使用的名称。这只是一个人为的例子。 问题答案: 你 并不 需要单独的声明和初始化。如果您知道怎么做