Kotlin学历之常用函数

简述

经过一段时间的应用,以及刚刚发布的六月份语言排行榜,kotlin成功的进入的前五十,而且潜力无限,更加坚定的认为:学习这么语言是值得的,只会更好。kotlin的特点特色基本学完了,剩下的就是实践过程中的应用,然后再学习一些常用的api,再深入一点可以研究下原理,下面介绍下常用的函数,以便以后用到的时候能运用自如,来体会高级语言带来的便利。

filter

=========

filter 函数用来过滤符合条件的函数,它是数组、集合、序列等数据结构的扩展函数。

首先看下源码

inline fun Array.filter( predicate : (T)->Boolean) : List { 
return filterTo(ArrayList() , predicate)
}

filter 接受 一个函数,该函数有个参数T,返回boolean类型 ,最后返回的boolean类型的值传给filterTo函数作为判断条件。只要为true就会返回到目标List中。

例:过滤完后返回偶数集合。

val listA = intArrayOf(0,1,2,3,4,5)

listA.filter{ it % 2 == 0}  // [0,2,4]

map

======

map函数把一个值映射为另一个值,直接看源码

inline fun Array<T,R> .map(transform:(T)->R) : List { 
return mapTo( ArrayList(size) , transform) 
}

map函数同样也是接受一个函数transform, transform将map中的T类型转换成R,最后交给mapto函数去轮询执行transform。最终将整个集合都转换成R的map.

注意: 这里的map 跟java的Map不要联想到一起,这只是对Array的扩展,是将 List转换成 List 集合

**例:**直接上图,用文字举例总感觉没说服力

map

reduce

=========

reduce函数 是将list中的元素 汇总,看源码

public inline fun <S, T: S> Iterable .reduce(operation: (acc: S,T) -> S): S {

      val iterator = this.iterator()

       if( ! iterator.hasNext() ) throw UnsupportedOperationException("Empty collection can't be reduced.")

       var accumulator: S = iterator.next()

        while( iterator.hasNext() ) {

                   accumulator = operation(accumulator,iterator.next())

         }

         return accumulator

}

reduce 函数接受一个类型为 (S, T) -> S 类型的函数 operation,返回值为 S 类型,其中 T 是数组元素的类型,S 是 T 的同一类型或父类型,reduce 会先取出数组的第一个元素作为初始化值,然后把这个值作为参数与下一个元素一起执行操作,将结果再次赋给这个值。完成所有元素的迭代归约后输出结果

注意: reduce 函数会在没有元素可归约时抛出 UnsupportedOperationException

例子:该函数经常与map函数一起用,下面将每个元素的第一个字母取出来 组成一个List 后 再 拼接在一起。

reduce

总结

这三个函数算是应用最为频繁的,在实际开发中,经常会遇到,所以要好好掌握,kotlin语言支持函数式编程,这三个应该是最好的体现,不知道什么时候大家又开始函数式编程,面向对象真的好吗,这个是值得咱们程序员认真思考的问题。今天到此结束,后会有期。