Kotlin中Collection一些语法总结

kotlin 对集合问题的支持很好,有很多方法可以方便又直观的对集合进行操作。比如 mapcountreducefilter等方法,这个博客会持续总结些方法。

any

any 这个函数返回值是一个 boolean 类型,用于判断集合内元素是否用满足条件的,如果有任意一个集合满足该条件,则返回 true 否是为 false

示例代码

1
2
3
4
5
6
7
fun main(args: Array<String>) {
val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34) //sum = 193
val l = list.any {
it > 30
}
println("判断结果为 $l")
}

输出结果为

判断结果为 true

这里的 it 可以理解为 iterator 既为集合中的每个元素。之后有很多函数都是对 it 进行操作。

all

all 几乎和 any 很相似,只是用于判断每个元素,要集合内每个元素满足条件才会返回ture,否则为 false

示例代码

1
2
3
4
5
6
7
fun main(args: Array<String>) {
val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34) //sum = 193
val l = list.all {
it > 30
}
println("判断结果为 $l")
}

判断结果为 false

map

map 这个函数对集合内的每一个元素进行迭代遍历,基本可以替代for循环。

示例

1
2
3
4
5
6
7
8
fun main(args: Array<String>) {

val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34)

list.map {
print("$it ")
}
}

输出结果为:

1 2 4 67 7 23 55 34

这样就完成了对集合的迭代输出。

filter

顾名思义,filter为一个过滤器,可以对我们集合元素进行一次过滤,留下我们想要的元素。
例如我们要集合中的偶数元素。

示例代码

1
2
3
4
5
6
fun main(args: Array<String>) {

val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34)

list.filter { it % 2 == 0 }.map { print("$it ") }
}

输出

2 4 34

完成了对偶数元素的过滤,结合map进行一下输出。如果我们不用filter和map进行输出,那么我们将会写下下面的这种代码,而且 IDEA 也会给我们警告,让我们及时改进。

1
2
3
4
5
for (i in 0 until list.size) {
if (list[i] % 2 == 0) {
print("${list[i]} ")
}
}

此时就会感觉到了这些语法对于代码的简洁和易用。

count

即使对集合元素进行统计,如果直接使用 count() 对集合元素统计和直接用 size 没有什么区别,所以说 count 有更加高级的用法。

比如对集合内的某个元素进行统计或者某种类型的元素进行统计,比如统计集合中偶数的个数。

1
2
3
4
5
6
7
fun main(args: Array<String>) {
val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34)
val count = list.count {
it % 2== 0
}
println("集合中的偶数个数为 $count")
}

输出

集合中的偶数个数为 3

groupBy

这个用于分组,对元素进行按要求分组,最后的结果也会保存在两个集合中, true 和 false

示例代码

对奇偶数进行分组

1
2
3
4
5
6
    val list: List<Int> = listOf(1, 2, 4, 67, 7, 23, 55, 34) //sum = 193
val result = list.groupBy {
it % 2 == 0
}
println("$result")
}

输出结果

{false=[1, 67, 7, 23, 55], true=[2, 4, 34]}

不介意的话,可以请我喝杯咖啡吗?或扫一扫支付宝领红包