kotlin - 在 kotlin 中映射一个可迭代的 1-to-n
问题描述
我想要做的是使用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
推荐阅读
- flutter - ListWheelScrollView 不识别水龙头
- javascript - ajax成功后如何在输入框中放置链接?
- r - R Shiny - 在单独的表格中显示线性、多项式和三次回归汇总
- css - 字体真棒 scss unicode 显示矩形
- c# - TeeChart 如何更改标记字体
- queue - 在集群环境中在 Weblogic 内部 JMS 上设置网桥
- plsql - 匿名块内的更新失败但可以解决
- curl - 如何通过 curl 在 Watson 的 Text to Speech 服务中调整语音速度?
- django - 在外键中使用实例
- java - 将桥接网络上运行的 Docker 容器连接到 Localhost