Kotlin
Kotlin

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

any

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

示例代码

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

示例代码

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循环。

示例

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为一个过滤器,可以对我们集合元素进行一次过滤,留下我们想要的元素。 例如我们要集合中的偶数元素。

示例代码

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 也会给我们警告,让我们及时改进。

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

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

count

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

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

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

示例代码

对奇偶数进行分组

    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]}