Kotlin 数据映射:比较、和map()flatMap()flatten()

虽然 Android 和 iOS 操作系统越来越重视它们使用的现代编程语言(分别是 Kotlin 和 Swift)引入的当代函数式编程模式和范式,但使用和操作集合的需求也随之呈指数级增长。

Kotlin 标准库包含了一系列扩展函数,旨在将转换添加到集合中,这些函数还旨在满足对良好、快速和高效集合操作日益增长的需求。

Kotlin 标准库提供的集合转小米如何刷MIUI4.0系统教程?小米推出MIUI8.2.4.0全球稳定Rom换主要有四种类型:映射、压缩、关联和扁平化。在本文中,我将只关注其中的两个;即 Map 和 Flatten,因为这组扩展函数具有特殊的关联,并且由于它们旨在组织的类似用例而永远压缩在一起。

追踪地图

让我们从地图的基础知识开始。的转换函数由 Kotlin 的官方文档定义:map()

映射转换根据另一个集合的元素上的函数结果创建一个集合。它将给定的 lambda 函数应用于每个后续元素,并返回 lambda 结果的列表。结果的顺序与元素的原始顺序相同。

为了更好地解释这意味着什么,让我们从一个简单的例子开始:

在这个例子中,我们有三个值:recovery模式是什么意思?如何进入手机的recovery模式?数字 1、2 和 3,然后使用带有谓词的函数进行处理,该谓词将集合中的每个元素乘以 ,并返回以下结果列表:Setmap()numbers``5

[5, 10, 15]

该函数具有一个对应函数,如何在Apple Watch上安装蓝牙耳机和听音乐?AppleWatch蓝牙耳机连接教程可以更方便地利用元素的索引。也就是说,当在所需的转换中可能需要元素的索引时,非常适合使用 。map()``mapIndexed()

下面是一个简单的示例,使用与之前相同的基本集合,然后是其结果:Set

[1, 1, 1]

在 Kotlin 的 null-safety 计划之后,Windows10系统如何进入BIOS?简单七步图文教程这两个扩展函数还附带了它们的版本,允许生成的集合忽略可能被给定转换取消的所有值。

两者都是方便地创建的,请记住,在某些情况下仍可能导致 null 值,它们的用法将在下一个代码块中展示:mapNotNull()``mapIndexedNotNull()

[6, 3, 9]
[6, 3, 9]

最后,将地图变换与集合一起使用会打开两个并行选项。要应用于映射键的转换应使用该函数,而应用于映射值的转换应改为使如何进入dos界面?电脑怎么使用Windows命令行 (DOS)用该函数。MapmapKeys()mapValues()

正如官方文档所解释的那样,这两个函数都使用将映射条目作为参数的转换,因此您可以同时操作其键和值:

{FIRST=1, SECOND=2, THIRD=3, FOURTH=4}
{first=6, second=8, third=8, fourth=10}

平整土地

正如 Kotlin 关于集合转换的文档所解释的那样,使用嵌套集合进行操作有时需要使用标准库函数,这些函数提供对嵌套集合元素的平面访问。有两个主要函数提供这些类型的解决方案:和 ,两者都被视为平展集合转换函数组的一部分。flatten()``flatMap()

首先是 ,一个函数,它将接受集合的集合并返回一个包含嵌套集合曾经具有的所有元素的单数。flatten()``List

在第一个示例中,我们采用 s 的嵌套列表,并将它们展平为一个仅显示所有值的单个值:flatten()SetList

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

该函数能够平展包含任何类型的对象类型的嵌套集合。为了进一步证明这一点,这里有一个非常相似的示例,它使用了:flatten()``String

[Los Angeles, San Francisco, Sacramento, Ausitn, San Antonio, Houston, Dallas, Mexico City, Monterrey, Guadalajara]

此外,此函数不受其嵌套集合中的对象类型的限制。这意味着内部集合内部可以包含不同的对象类型,并且该函数仍应能够构造包含各种类型的所有结果的类型结果:flatten()ListAny

[1, 2, 3, one, two, three, 1.0, 2.0, 3.0]

绘制平地地图

Kotlin 提供的另一个 Flatten 集合转换函数是 。根据其文档,第二个函数的工作方式与 Hybrid 非常相似,但提供了额外的灵活性,即通过采用将集合元素映射到另一个集合的函数来提供处理嵌套集合的方法。因此,返回所有元素的返回值的单个列表。flatMap()flatten()flatMap()

flatMap()`表现为 的后续调用 — 集合作为映射结果 — 和 。
— [kotlinlang.org](https://kotlinlang.org/docs/collection-transformations.html#flatten)`map()``flatten()

让我们从我们用来测试的示例开始,但添加一些变体以强调这两个选项之间的区别:flatten()

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

在上面的示例中,我们回收了其中一个示例,但我们正在使用该函数来获得相同的结果。flatten()``flatMap()

如此处可见,该函数不仅平展嵌套集合,而且还通过内部集合上触发的函数获得额外的机会,以向内部集合类型(在本例中为不同的 s)添加转换以进行进一步操作:flatMap()Setmap()

[6, 7, 8, 9, 4, 5, 1, 2, 3, 0]

在第二个示例中,我们再次使用相同的代码,但这次我们将添加额外的操作作为函数步骤的一部分,以进一步揭示两个 Flatten 函数之间的主要区别。flatMap()``map()

该函数在处理复杂数据类或 POJO 时特别有用,因为它将有机会查找或进一步转换嵌套在第一层下的信息。flatMap()

在下面的示例中,我们将使用一个轻度复杂来探索调用中更复杂的数据操作:data class``flatMap()

[Austin, San Antonio, Dallas, Houston, Los Angeles, San Francisco, Sacramento, Monterrey, Guadalajara, Mexico City]

就像它的同胞一样,该函数也能够展平不同类型的集合,最终被解释为类型的集合:flatten()flatMap()Any

[one, two, three, 1, 2, 3]

最后,该函数还能够在其转换块内添加额外的转换,以便向嵌套集合组最内层的集合添加更多转换:flatMap()``map()

[Austin:Texas, San Antonio:Texas, Dallas:Texas, Houston:Texas, Los Angeles:California, San Francisco:California, Sacramento:California, Monterrey:Mexico, Guadalajara:Mexico, Mexico City:Mexico]

最后一个例子显示了该函数的巅峰用法。将 与后续调用相结合将允许对列表进行最通用和最精细的操作,同时为用户提供对此类列表的平面解释,以满足任何类型的需求。flatMap()flatMap()map()

结论

所有三个 Kotlin 数据映射函数(、 和 )都是一组专门处理 Kotlin 集合的转换函数的一部分。它们有助于解释和操作复杂和/或嵌套集合,这些集合在其默认状态下可能很难分析。map()flatten()flatMap()

通过正确利用这些强大的功能中的任何一个,开发人员应该能够更好地从任何类型的复杂集合结构中提取所需的信息。这种技术对于最大限度地提高开发人员工作的效率和可靠性至关重要。在处理流行的反应式流编码范式时,正确使用这些可能会派上用场,而流行的并发库(如 RxJava 和 Kotlin 协程)使您能够做到这一点。

猜你喜欢

转载自blog.csdn.net/weixin_47967031/article/details/132575541