Kotlin flatMap() 函数
在开发应用程序时,我们始终在整个应用程序中使用集合框架。 如果您有任何列表,那么您已经与集合进行了交互。
我们使用集合将相关数据临时存储在内存中,以对数据执行不同的计算。 例如,集合帮助我们从数据库或文件中找到数据大小。
在 Java 8 中引入流之前,这些计算很难实现,因为开发人员使用命令式编程方法。
流 API 使集合的计算非常容易实现,因为代码使用声明式编程方法。
在 Kotlin 中,我们还可以将这种编程方法与流 API 中使用的相同方法一起使用,例如 filter()、map()、flatMap() 等。
在本篇文章中,我们将了解 flatMap()
函数在 Kotlin 中的工作原理,以及 flatMap()
和 map() 函数之间的区别。
在 Kotlin 中使用 map() 函数时的常见陷阱
使用 map()
函数时,您可能决定在对两个列表进行操作后获得单个列表,但该函数不会返回单个列表。
这是使用 map()
方法的常见问题。 下一节说明问题是如何发生的。
打开 IntelliJ 开发环境并选择 File > New > Project。 输入项目名称 kotlin-flatmap,在 Language 部分选择 Kotlin,在 Build system 部分选择 Intellij。
在kotlin文件夹下新建一个Main.kt文件,将以下代码复制粘贴到文件中。
val stringArray = arrayOf("Harry", "potter");
fun getUniqueCharacters(): List<List<String>> {
return stringArray.map { word -> word.split("") }
.distinct()
.toList();
}
fun main(){
println(getUniqueCharacters());
}
我们将在本教程中介绍的所有示例的目标是从具有两个字符串的数组中返回包含不同字符的单个列表,如上所示。
如果您注意到,getUniqueCharacters()
方法返回列表列表 List<List<String>>
的列表,这是 map() 函数的返回类型。
map() 函数返回一个包含两个不同列表的列表,这违背了我们的目标。 运行代码以验证 map() 函数是否返回两个不同的列表,如下所示。
[[, H, a, r, r, y, ], [, p, o, t, t, e, r, ]]
Kotlin flatMap() 函数
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
val stringArray = arrayOf("Harry", "potter");
fun getUniqueCharacters(): List<String> {
return stringArray.map { word -> word.split("") }
.flatMap { it }
.distinct()
.toList();
}
fun main(){
println(getUniqueCharacters())
}
getUniqueCharacters()
函数返回一个列表,其中包含一个字符串,该字符串是 flatMap() 函数的返回类型。
flatMap() 通过使用 split() 方法将数组转换为单个字符,返回包含唯一元素的单个列表。 distinct() 方法确保返回的列表包含唯一字符。
运行上面的代码来验证包含唯一字符结果的单个列表。
[, H, a, r, y, p, o, t, e]
Kotlin 中 flatMap() 函数的替代方案
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
val stringArray = arrayOf("Harry", "potter");
fun getUniqueCharacters(): List<String> {
return stringArray.map { word -> word.split("") }
.flatten()
.distinct()
.toList()
}
fun main(){
println(getUniqueCharacters())
}
在这个例子中,我们使用了类似于 flatMap() 函数的 flatten() 函数。 flatten() 函数通过将所有现有集合元素添加到一个列表中来返回单个列表。
运行此示例以验证它是否返回包含数组中所有唯一字符的单个列表。
[, H, a, r, y, p, o, t, e]
总结
在本篇文章中,我们了解了当您想从多个集合中返回单个列表时 flatMap() 函数的工作原理。 我们还了解了使用 map() 方法实现相同目标的缺点。
相关文章
Kotlin 中 Java String[] 的等价物
发布时间:2023/05/13 浏览次数:59 分类:Java
-
本文介绍了 Kotlin 中 Java String[] 的等价物。 我们将看到所有可能的方法来为 Kotlin 实现与 Java 中的 String[] 相同的结果。
将 Java 文件代码转换为 Kotlin
发布时间:2023/05/13 浏览次数:142 分类:Java
-
Kotlin 现在是一种官方的 Android 语言。 因此,您可能希望将 Java 文件更改为 Kotlin。 本文教您如何将 Java 转换为 Kotlin。
在 Kotlin 中使用 forEach
发布时间:2023/05/13 浏览次数:122 分类:Java
-
本文介绍 Kotlin 中 forEach 关键字的概念和使用。 我们将看到一些使用 Kotlin forEach 循环的示例来理解它。
在 Kotlin 中使用 reified 关键字
发布时间:2023/05/13 浏览次数:197 分类:Java
-
reified 关键字是在 Kotlin 中使用泛型时最常使用的编程概念。在本教程中,我们将学习如何使用两种方法解决此问题,包括将类型的类作为泛型函数的参数传递,以及将 reified 关键字与内联函数
Kotlin 中 ! 和 ? 运算符之间的区别
发布时间:2023/05/13 浏览次数:180 分类:Java
-
在 Kotlin 中,断言运算符 !! 和安全调用符 ? 使用 Null 安全。本文介绍空安全的概念。 我们也将通过如何! 和 ? 在 Kotlin 中有助于空安全。
Kotlin 中 is 运算符 与 as 运算符之间的区别
发布时间:2023/05/13 浏览次数:148 分类:Java
-
这篇文章讨论了 Kotlin 中 is 和 as 运算符之间的区别。 我们还将介绍如何以及何时使用每一个。
Android Studio 中的 Kotlin 打印到控制台
发布时间:2023/05/13 浏览次数:52 分类:Java
-
Kotlin 的 logcat 窗口可以实时显示输出,让开发人员能够高效地处理他们的代码。 今天,我们将完成将消息打印到 Kotlin 控制台的步骤。
在 Kotlin 中获取随机数
发布时间:2023/05/13 浏览次数:68 分类:Java
-
随机数是使用一种算法从一组数字中生成的,该算法可确保每个数字的生成概率相等。在Kotlin中使用IntRange的random()扩展函数
在 Kotlin 中使用内联函数
发布时间:2023/05/13 浏览次数:199 分类:Java
-
Kotlin 允许使用内联函数有效地处理更高级的函数。 在本文中,我们将介绍我们需要了解的有关 Kotlin 中的内联函数的所有信息。