快速上手 Kotlin 开发系列之操作符

本节介绍操作符的实现原理以及一些常用的操作符。

为了方便理解,我们把作用域函数和集合操作符统称为 Kotlin 的操作符。

操作符的实现原理

作用域函数与集合操作符的原理是完全一致的,这里以集合操作符作为一个例子来看整个作用域函数和集合操作符的运行原理。

来看下这个 Kotlin 内置的操作符 forEach,它其实是对泛型为 T 的 Iterable 的一个扩展函数,其实内部就是执行了 for-in 形式的循环,this 表示当前 T 泛型的 Iterable 对象,循环执行 action 方法,也就是我们传入的 Lambda 闭包。

public inline fun  Iterable.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

同样的,之前写过的自定义扩展函数 convert,也是这样的原理:

inline fun  Iterable.convert(action: (T) -> E): MutableList {
    val list: MutableList = mutableListOf()
    for (item in this) list.add(action(item))
    return list
}

所以基本上不管是作用域函数还是之前提到的集合操作符,它的本质都是扩展函数,或者类似于扩展函数的形式为我们的代码进行一系列的扩展操作。

常用操作符

下面为大家列出了 Kotlin 中集合常用的操作符,这些操作符没有必要去记它,只需要根据编译器的提示去使用即可。

元素操作类

操作符 描述
contains 判断是否有指定元素
elementAt 返回对应的元素,越界会抛 ArrayIndexOutOfBoundsException
firstOrNull 返回符合条件的第一个元素,没有返回 null
lastOrNull 返回符合条件的最后一个元素,没有返回 null
indexOf 返回指定元素的下标,没有返回 -1
singleOfNull 返回符合条件的单个元素,如有没有符合或者超过一个,返回 null

判断类

操作符 描述
any 判断集合中是否有满足条件的元素
all 判断集合中的元素是否都满足条件
none 判断集合中是否都不满足条件,是则返回 true
count 查询集合中满足条件的元素个数
reduce 从第一项到最后一项进行累计

过滤类

操作符 描述
filter 过滤所有满足条件的元素
filterNot 过滤所有不满足条件的元素
filterNotNull 过滤 null
take 返回前 n 个元素

转换类

操作符 描述
map 转换成另一个集合(与之前提到的 convert 类似)
mapIndexed 除了转换成另一个集合,还可以拿到 Index 下标
mapNotNull 执行转换前过滤掉 null 的元素
flatMap 自定义逻辑合并两个集合
groupBy 按照某个条件分组,返回 map

排序类

操作符 描述
reversed 反序
sorted 升序
sortedDescending 降序
sortedBy 自定义排序

以上就是本节内容,欢迎大家关注~

快速上手 Kotlin 开发系列之操作符_第1张图片

你可能感兴趣的:(Kotlin,java,编程语言,kotlin,android,android,studio)