在 kotlin 中映射可迭代的 1 对 n
Mapping an iterable 1-to-n in kotlin
我想做的是使用 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"]
此代码将生成一个包含字符串和字符串列表(类型 Any
)的列表。
我怎样才能最优雅地实现它?
一种快速的方法是使用 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
我想做的是使用 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"]
此代码将生成一个包含字符串和字符串列表(类型 Any
)的列表。
我怎样才能最优雅地实现它?
一种快速的方法是使用 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