我们可能collections
在Kotlin
我们的项目上工作过。在集合中,有时我们可能必须使用某些条件根据我们的要求进行一些操作来修改它,例如,
例如,仅从 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
网友评论