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

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

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

操作符的实现原理

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

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

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

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

inline fun <T, E> Iterable<T>.convert(action: (T) -> E): MutableList<E> {
    val list: MutableList<E> = 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自定义排序

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

长按关注

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值