美文网首页
Kotlin 中的 FlatMap 与 Map

Kotlin 中的 FlatMap 与 Map

作者: 程序员DS | 来源:发表于2022-07-20 10:19 被阅读0次

我们可能collectionsKotlin我们的项目上工作过。在集合中,有时我们可能必须使用某些条件根据我们的要求进行一些操作来修改它,例如,

例如,仅从 Cars 列表中获取汽车名称列表。或者,如果我们有两个汽车和自行车列表,那么我们可能需要一个包含汽车和自行车列表中所有数据的列表,我们将开始执行一组特定的迭代来获得结果。

transformations在文中,我们将讨论可以collections在 Kotlin中使用的两种类型。他们是,

  • Map
  • FlatMap

Map

根据官方文档,

Map 返回一个列表,其中包含对原始集合中的每个元素应用特定转换集的结果

它基本上意味着我们可以根据我们的要求修改列表。为了更好地理解它,

假设我们有一个整数列表,我们想要另一个整数列表,其中元素是原始列表中数字的平方。传统上,我们可以使用 for/forEach 循环来执行这些操作,例如,

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = mutableListOf<Int>()

numbers.forEach {
    squaredNumbers.add(it * it)
}

在这里,我们首先在列表中创建了一个mutableList,而我们将每个项目的 都添加到列表中。当我们打印它时,它会打印,iteratingnumberssquaresquaredNumbers

[1, 4, 9, 16, 25]

这将使用所有数字的平方打印所需的列表。

但是,要做到这一点,我们必须写出 5 行代码。在 Kotlin 中,我们可以使用 map 执行相同的操作,例如,

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map {
    it * it
}

在这里,我们创建了一个列表squaredNumbers,并通过向其添加一些转换从数字列表中添加项目。

Map帮助我们对列表中的每个元素执行某种转换,并返回一个新转换数据的列表。当我们打印上面的squaredNumbers列表时,它会打印,

[1, 4, 9, 16, 25]

这与上面的输出相同,但代码行更少。

所以,基本上,map可以在集合上使用,Kotlin这将帮助我们对集合的每个元素进行一些转换并返回一个新集合。

FlatMap

根据官方文档,

返回对原始集合的每个元素应用特定条件的结果产生的所有元素的单个列表。

一般而言,FlatMap用于组合两个不同的集合并返回为single collection. 为了更好地理解它,让我们考虑一个例子,

假设我们有一个数据类

data class MotorVehicle(
    val name: String,
    val model: Int,
    val manufacturer: String
)

我们有两种不同的系列,一种是汽车,另一种是自行车,例如,

val cars = listOf(
    MotorVehicle("Swift", 2016, "Maruti"),
    MotorVehicle("Altroz", 2020, "Tata"),
    MotorVehicle("Verna", 2019, "Hyundai")
)
val bikes = listOf(
    MotorVehicle("R-15", 2018, "Yamaha"),
    MotorVehicle("Gixxer", 2017, "Suzuki")
)

两者都是集合,MotorVehicle并且它们具有不同的值集,例如一个用于汽车,另一个用于自行车。

我们想要做的是,我们希望将它作为 a single list类型返回MotorVehicle。传统的做法是,

val allVehicles = mutableListOf<MotorVehicle>()
allVehicles.addAll(cars)
allVehicles.addAll(bikes)

这会将两个集合合并为一个并打印输出。

但是我们也可以使用flatMaplike来执行此操作,假设我们有两个列表的集合,例如,

val vehicles = listOf(cars, bikes)

在这里,车辆是汽车和自行车列表的列表,我们希望将汽车和自行车中的所有元素合并到一个列表中。

我们可以这样做,

val allVehicles = vehicles.flatMap { it }

当我们打印上面的代码时,它会打印以下内容,

[MotorVehicle(name=Swift, model=2016, manufacturer=Maruti), MotorVehicle(name=Altroz, model=2020, manufacturer=Tata), MotorVehicle(name=Verna, model=2019, manufacturer=Hyundai), MotorVehicle(name=R-15, model=2018, manufacturer=Yamaha), MotorVehicle(name=Gixxer, model=2017, manufacturer=Suzuki)]

在这里,flatMap这里从列表中取出每一项,然后将其组合成一个列表。

一起使用 Map 和 FlatMap
假设我们想要一个列表中只有制造商的列表,

val vehicles = listOf(cars, bikes)

map我们可以同时使用and来获得输出flatMap transformations。因此,要获得我们将使用的输出,

val manufacturerList = vehicles.flatMap {
     it
 }.map {
     it.manufacturer
 }

在这里,我们首先使用 将 的所有项目合并vehicles到一个列表中flatMap,然后使用map转换从组合列表中仅映射制造商。

它会打印,

[Maruti, Tata, Hyundai, Yamaha, Suzuki]

在这里,它打印了字符串类型的制造商列表。

结论:

  • FlatMap用于将列表的所有项目组合成一个列表。
  • Map用于根据特定条件转换列表。

作者:Himanshu Singh
链接:https://blog.mindorks.com/flatmap-vs-map-in-kotlin

相关文章

网友评论

      本文标题:Kotlin 中的 FlatMap 与 Map

      本文链接:https://www.haomeiwen.com/subject/scyeirtx.html