【问题标题】:Mapping an iterable 1-to-n in kotlin在 kotlin 中映射一个可迭代的 1-to-n
【发布时间】:2019-03-02 10:38:03
【问题描述】:

我想做的是使用Iterable.map,但不是将每个值都转换为一个新值,而是将一个值转换为多个新值。

例如:

val myList = listOf("test", "123", "another.test", "test2")
val result = myList.map {
    if(it.contains(".")) {
        return@map it.split(".")
    } else {
        return@map it
    }
}
//desired output: ["test", "123", "another", "test", "test2"]

此代码将生成一个 List,其中包含字符串和字符串列表(类型 Any)。

我怎样才能最优雅地实现这一点?

【问题讨论】:

    标签: kotlin iterable


    【解决方案1】:

    一种快速的方法是使用flatMap

    val output = myList.flatMap { if(it.contains(".")) it.split(".") else listOf(it) }
    

    flatMap 方法使用给定函数转换每个元素,然后将结果展平为单个列表。

    https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/flat-map.html

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2015-10-08
      • 2022-10-23
      • 1970-01-01
      相关资源
      最近更新 更多