2020-04-25-高阶函数的用法

※本文章并非原创,而是引用郭霖直播中的内容

直播连接: 

http://t.cn/A6wTXb9G


/*   定义一个List集合的扩展函数: findmax

 *   参数类型为:  函数类型

*    > List.findMax(block: (T)->R) :T? 中用到的泛型说明

*    应为List是一个结合,所以要用到泛型,定义为: fun List.findMax(block : (T))

 *    而lambda表达式的返回类型为可比较的,所以要指定R: comparable这个泛型

 *    结果为: > List.findMax(block : (T) -> R)

 *    block的用法不理解的话,参照我的上一篇(2020-04-24-郭霖大神讲的高阶函数总结)

 *    拓展函数也需要返回类型,我们定义为泛型T,所以变为

 *    > List.findMax(block : (T) -> R) : T

 *    T?  : 代表的意思是因为  "if (isEmpty())return null"语句返回了null ,返回类型为null的性化,函数的返回

 *    类型定义要加?,结果为 T?

*/

fun > List.findMax(block: (T)->R) :T? {

        if (isEmpty())return null

        var maxElement =this[0]

        var maxValue = block(maxElement)

        for (elementin this) {

            val value = block(element)

            if (value > maxValue) {

            maxElement = element

            maxValue = value

           }

            return maxElement

}


高阶函数的调用方法:

val list =listOf("Apple","Pear","Banana","Watermelon")

println(list.findMax2 { it.length })

执行结果:

Watermelon

你可能感兴趣的:(2020-04-25-高阶函数的用法)