在 Kotlin 中使用 Map函数转换列表
Kotlin 是 JetBrains 开发的一种静态类型的通用编程语言,构建了 IntelliJ IDEA、PhpStorm、Appcode 等世界一流的 IDE。它由 JetBrains 于 2011 年首次推出,是一种新的 JVM 语言。 Kotlin 是一种面向对象的语言,是一种比Java“更好的语言”,但仍可与Java代码完全互操作。在本文中,我们将学习如何使用 Kotlin 中的 map函数转换列表,以及如何使用我们喜欢的任何标准过滤列表。我们将使用 lambda 函数,它提供了一种进行函数式编程的好方法。所以让我们开始吧。
例子
首先,让我们看看如何在列表上使用过滤器函数。 filter函数返回一个列表,其中包含与给定谓词匹配的所有元素。我们将创建一个数字列表并根据偶数或奇数过滤列表。 filter 方法适用于不可变集合,因为它不会修改原始集合,而是返回一个新集合。在过滤器方法中,我们需要实现谓词。谓词与条件一样,基于过滤的列表。例如,我们知道偶数项会跟随它%2==0。所以对应的过滤方法会是这样的:
Kotlin
val listOfNumbers = listOf (1, 2, 3, 4, 5, 6, 7, 8, 9)
var evenList = listOfNumbers.filter {
it $2==0
}
println (evenList)
Kotlin
val listOfNumbers = listOf (1, 2, 3, 4, 5, 6, 7, 8, 9)
var transformedList = listOfNumbers.map {
it*2
}
println(transformedList)
Kotlin
val listOfNumbers=listOf (1, 2, 3, 4, 5)
val map=listOfNumbers.mapIndexed { index, it
-> it*index
}
println(map)
输出:
[2, 4, 6, 8]
filter函数的另一个变体是 filterNot,顾名思义,它返回一个列表,其中包含与给定谓词不匹配的所有元素。另一个很酷的 lambda函数是 map。它转换列表并返回一个新列表:
科特林
val listOfNumbers = listOf (1, 2, 3, 4, 5, 6, 7, 8, 9)
var transformedList = listOfNumbers.map {
it*2
}
println(transformedList)
输出:
[2, 4, 6, 8, 10, 12, 14, 16, 18]
map函数的一个变体是 map Indexed。它提供索引及其构造中的项目:
科特林
val listOfNumbers=listOf (1, 2, 3, 4, 5)
val map=listOfNumbers.mapIndexed { index, it
-> it*index
}
println(map)
输出:
[0, 2, 6, 12, 20]
转换地图
与 Kotlin 中的其他集合类型一样,有许多方法可以根据应用程序的需要转换映射。让我们看一些有用的操作。对于下面显示的所有示例,这是我们库存图中的初始数据:
val inventory = mutableMapOf(
"Vanilla" to 54,
"Chocolate" to 64,
"Strawberry" to 39,
)
Kotlin 为地图提供了几种过滤方法。要按输入键或值进行过滤,分别有 filterKeys 和 filterValues。如果我们需要同时过滤,有 filter 方法。这是一个按剩余数量过滤冰淇淋库存的示例:
val lotsLeft = inventory.filterValues { qty -> qty > 10 }
assertEquals(setOf("Vanilla", "Chocolate"), lotsLeft.keys)
- filterValues 方法将给定的谓词函数应用于映射中每个条目的值。过滤后的映射是与谓词条件匹配的条目的集合。
- 如果我们想过滤掉不符合这个条件的条目,我们可以使用 filterNot 方法。
使用哪一个?
如果这两种方法本质上实现了相同的功能,我们应该使用哪一种? toMap,在实现方面,更加直观。然而,使用这种方法需要我们首先将我们的 Array 转换为 Pairs,然后必须将其转换为我们的 Map,所以如果我们已经在对 Pairs 的集合进行操作,这个操作将特别有用。