在kotlin中映射可迭代的1到n

问题描述 投票:1回答:1

我想要做的是使用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个回答
2
投票

一个快速的方法是使用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

© www.soinside.com 2019 - 2024. All rights reserved.