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

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

直播连接: 

http://t.cn/A6wTXb9G


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

 *   参数类型为:  函数类型

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

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

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

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

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

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

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

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

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

*/

fun <T, R : comparable<R>> 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文内容是基于2020/4/23郭神的直播内容,并非自己原创。 高阶函数的三种实现方法: ①非匿名函数形式 定义两...
    Tokyobatman阅读 1,873评论 0 0
  • 1.filter filiter回调函数有一个要求就是必须返回一个boolean值当返回值为true时,函数内部会...
    本泽锅阅读 2,299评论 0 1
  • “荣耀属于那些亲自置身战场的勇者,他们灰头土脸、血污满溅却依旧在奋勇搏杀,他们历经坎坷、一错再错却仍然没放弃努力,...
    贾存军阅读 2,695评论 0 0
  • 我的弟弟又淘气又可爱。今天妈妈上班走后,我和弟弟一起玩玩具可是他总是找事,我和弟弟玩积木他突然哭了起来。我都不知道...
    李阳怡梦阅读 1,540评论 0 0
  • 梦中记, 蝶飞满园。 醉时起, 游走房间。 清出泪, 物是人非。 ​​​
    陈梦隐阅读 1,301评论 4 2

友情链接更多精彩内容