快速上手 Kotlin 开发系列之集合操作符
Posted 张鹿鹿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速上手 Kotlin 开发系列之集合操作符相关的知识,希望对你有一定的参考价值。
本节接上一篇继续介绍 Kotlin 的集合操作符和如何自定义集合操作符。
通过上一节 Rxjava 的示例,我们把同样的功能使用 Kotlin 来实现。
Kotlin 示例
附上整体代码:
fun main()
val a = arrayOf("4", "0", "7", "i", "f", "w", "0", "9")
val index = arrayOf(5, 3, 9, 4, 8, 3, 1, 9, 2, 1, 7)
index
.filter it < a.size
.map a[it]
.reduces, s1 -> "$s$s1"
.also println("密码是:$it")
首先还是声明两个数组,一个是作为参数输出的字符串数组,另外一个是下标数组。
之后就可以直接操作集合,而不是像 RxJava 一样经过 flatMap。
filter 等价于 RxJava 的 filter,过滤下标大于 String 数组的值。
.filter it < a.size
map 等价于 RxJava 的 map,做一次数据类型变换。取出对应下标的元素。
.map a[it]
reduce 等价于 RxJava 的 reduce,做一次数据合并。这里使用 Kotlin 的模板字符串的方式将两字符串合并。
.reduces, s1 -> "$s$s1"
最后,使用 also 输出结果,相当于 RxJava 的 subscribe。
.also println("密码是:$it")
我们首先直观上看,Kotlin 的代码量要远远小于 RxJava,这里面一个原因是 Kotlin 不需要 flatmap 操作符去做变换,第二个原因是 Kotlin 原生支持了 Lambda 表达式,所以我们不需要像 Java 一样每一个参数都去显式的 new 一个接口对象。
如果我们想有一个自定的集合操作符,该怎么做呢?
自定义集合操作符
其实 Kotlin 的所有操作符都是一个 inline 的扩展函数来实现的。
比如这里我们定一个 convert,它的功能实际上跟 map 的功能是一致的,将我们输入的参数转换成另外一种类型的数据输出,它扩展的是一个迭代器,也就是说我们所有的集合都可以使用这个扩展函数:
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
fun main()
val list: List<Int> = listOf(1, 2, 3, 4, 5)
list.convert it + 1
.forEach
print("$it ")
以上就是本节内容,欢迎大家关注~
以上是关于快速上手 Kotlin 开发系列之集合操作符的主要内容,如果未能解决你的问题,请参考以下文章