关键词:
本节介绍操作符的实现原理以及一些常用的操作符。
为了方便理解,我们把作用域函数和集合操作符统称为 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 | 自定义排序 |
以上就是本节内容,欢迎大家关注~
快速上手kotlin开发系列之反引号(代码片段)
...个不合法的字符变为合法其中第1个特性在前面的文章【快速上手Kotlin开发系列之与Java互调(1)】中已经提到过,不再赘述。今天着重介绍它的第2个特性,将不 查看详情
快速上手kotlin开发系列之循环(代码片段)
本节介绍Kotlin的循环语法。下面的示例是我们最熟悉的循环语法,但是这种语法在Kotlin中是不能使用的。不过没有关系,在Kotlin中有更多适合的语法供我们选择。以下列出5种Kotlin中常用的循环语法:常用的循环语法... 查看详情
快速上手kotlin开发系列之解构(代码片段)
本节介绍Kotlin中特殊的数据拆箱方式:解构。解构在Kotlin中允许直接将一个类拆解之后并分别赋值,就像示例中的User对象一样,可以赋值给一个拆解开的age和name变量。解构的格式固定,val/var括号后的第一个值与U... 查看详情
快速上手kotlin开发系列之协程的挂起(代码片段)
站在巨人的肩膀上做个笔记,摘录自:https://kaixue.io/kotlin-coroutines-2前言上一节中我们提到了下面的示例,它使用了async关键字来创建一个协程。launch(Dispatchers.Main)valavatar=asyncgetAvatar()//获取用户头像vallogo=asyncgetLo... 查看详情
快速上手kotlin开发系列之集合操作符
本节通过RxJava的集合操作引入Kotlin的集合操作符。如果大家有用过RxJava一定对操作符的概念并不陌生,RxJava允许我们对数据做一系列的链式调用,在每一步中改变数据的格式,最终得到我们想要的数据。Kotlin中原生的... 查看详情
快速上手kotlin开发系列之操作符(代码片段)
本节介绍操作符的实现原理以及一些常用的操作符。为了方便理解,我们把作用域函数和集合操作符统称为Kotlin的操作符。操作符的实现原理作用域函数与集合操作符的原理是完全一致的,这里以集合操作符作为一个例... 查看详情
快速上手kotlin开发系列之什么是协程(代码片段)
站在巨人的肩膀上做个笔记,摘录自:https://kaixue.io/kotlin-coroutines-1协程是什么协程的概念并没有官方的或者统一的定义,协程原本是一个跟线程非常类似的用于处理多任务的概念,是一种编程思想,并不局限... 查看详情
快速上手kotlin开发系列之协程的挂起(代码片段)
站在巨人的肩膀上做个笔记,摘录自:https://kaixue.io/kotlin-coroutines-2前言上一节中我们提到了下面的示例,它使用了async关键字来创建一个协程。launch(Dispatchers.Main)valavatar=asyncgetAvatar()//获取用户头像vallogo=asyncgetLo... 查看详情
kotlin快速上手篇之android&kotlin常用开发对比(代码片段)
变量定义与常用数据类型java:inti=1;longl=2;booleanb=true;floatf=0;doubled=0;charc='A';Strings="text";Intentintent=newIntent();Kotlin:vari:Int=1var 查看详情
算法系列之--javascript和kotlin的快速排序算法(原)(代码片段)
上一节我们学习了基数排序算法,这一节来学习快速排序算法,算法系列文章目录在这里。介绍 从这个快速排序算法的名字就可以看出他非常快,有多块呢?在平均状况下,排序n个项目要O(nlogn)次比较。... 查看详情
快速上手kotlin接口抽象类及泛型(代码片段)
接口定义 kotlin规定所有的接口属性和函数实现都要使用override关键字,接口中定义的函数并不需要open关键字修饰,他们默认就是open的代码展示:packagecom.wustyq.kotlinstudyinterfaceMovablevarmaxSpeed:Intvarwheels:Intfunmove(movabl... 查看详情
kotlin系列之数组与集合(代码片段)
今天说说kotlin中的数组和集合。我们前面说过kotlin是一门更加纯粹的面向对象的语言,所以kotlin中的数组与集合与Java中会有一些不同,但是为了性能考虑,同时因为kotlin的最终编译产物是运行在JVM之上的,还为了... 查看详情
响应式spring的道法术器(springwebflux快速上手+全面介绍)(代码片段)
1.SpringWebFlux2小时快速入门Spring5之使用SpringWebFlux开发响应式应用。lambda与函数式(15min)Reactor3响应式编程库(60min)SpringWebflux和SpringDataReactive开发响应式应用(45min)通过以上内容相信可以对Spring5.0推出的响应式开发有了初步的... 查看详情
wi-fi模组二次开发课程——3.快速上手(代码片段)
本系列课程面向有嵌入式开发经验的同学,用来介绍如何在涂鸦的Wi-Fi系列模组和Wi-Fi&BluetoothLE系列模组上进行二次开发。上篇回顾:Wi-Fi模组二次开发——SoC开发环境搭建在虚拟机搭建完成后,我们需要先在涂鸦Io... 查看详情
快速开发的项目壳,kotlin语言开发(代码片段)
...xff1a;hegaojian/MvvmHelper 简介::chicken::basketball:这是一个快速开发的项目壳,Kotlin语言开发,MVVM+Jetpack架构,封装了公共头部、界面状态管理、ViewModel、LiveData、DataBinding、头部刷新、加载更多、沉浸式、全局通知... 查看详情
sqoop快速上手(代码片段)
ETL系列之Sqoop==楼兰==文章目录一、ETL简介1、关于ETL2、大数据与传统关系型数据库的关系3、Sqoop简介二、Sqoop下载三、Sqoop基础使用3.1前置软件3.2Sqoop安装3.3Sqoop基础使用1、查看Sqoop的帮助信息2、单独连接数据库3、导... 查看详情
字节内部超全kotlin学习笔记,快速上手kotlin开发,基础+实战+源码,手把手带你吃透kotlin语法与协程。(代码片段)
目前市面上主流的App和库,大都是使用Kotlin语言开发的,在PlayStore的前1000个应用程序中有80%以上使用Kotlin。这也意味着,对于Android应用开发者来说,仅仅掌握Java是不够的,你还应该学习Kotlin,才能追上技... 查看详情
kotlin系列之基本类型(代码片段)
今天一起来看看kotlin中的基本类型,包括基本的数据类型和其他一些特殊的与Java不同的类型。基本数据类型在Java中数据类型被分为基本数据类型和引用数据类型。在kotlin中所有的数据类型都是引用数据类型。与Java中的数据... 查看详情