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() 方法实现相同目标的缺点。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,