※本文章并非原创,而是引用郭霖直播中的内容
直播连接:
/* 定义一个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