参数类型包含函数类型或者返回值类型为函数类型的函数为高阶函数
本节没有太多的文字内容叙述,直接上代码:
val mMap:MutableMap = mutableMapOf("a" to "b")
// 上面的“.forEach”、“.map”两个高阶函数以及类似这样的高阶行数:其实他的完整形态应该是这样的:“、map()”、“.forEach()”;
// 当只有一个lambda表达式作为参数的时候我们可以直接省略小括号“()”
mMap.forEach {
}
val mIntArray: Array = arrayOf(1,2,3,4,5,6)
mIntArray.map {
}
高阶函数:参数类型 包含 函数类型 或者 返回值类型为函数类型 的函数为高阶函数
fun returnFunction(): () -> Long {
return {
System.currentTimeMillis()
}
}
注意上面“return”后面的写法:“return{ … }”表示返回的是一个函数。
另外比如下面的例子:数组、map集合、list集合的forEach循环:
1、“Array.”表示这是一个扩展函数;
2、 表示泛型,指定动态的指定调用该函数的数据类型;
3、“action: (T) -> Unit”表示接收一个函数类型作为参数;
4、“action(element)”表示调用函数。
public inline fun Array.forEach(action: (T) -> Unit): Unit {
for (element in this) action(element)
}
a、“Map
b、“
c、“action: (Map.Entry
d、“action(element)”表示调用函数。
public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit {
for (element in this) action(element)
}
Ⅰ、下面是将map转换为list的一个扩展函数,
Ⅱ、“”泛型,指定数据类型;
Ⅲ、“transform:(Int) -> R”接收函数类型作为参数。
Ⅳ、“ mapTo(ArrayList(size), transform)”:调用的是另一个高阶函数。
inline fun IntArray.map(transform:(Int) -> R):List{
return mapTo(ArrayList(size), transform)
}
收起、折叠暂时不访问的代码的方式://region+折叠、//endregion;然后快捷键:Ctrl + “-”、Ctrl + “+”
说明:
1、该方法的功能:判断block()方法执行过程中耗时多少;
2、 “block:()”:block表示一个参数;后面的“()”表示这个block参数的类型是ige函数方法;
3、“Unit”:表示函数的返回值类型。
//region+折叠(与后面的“endregion”组合使用)
fun cost(block:() -> Unit){
val start = System.currentTimeMillis();
block()
println("${System.currentTimeMillis() - start}")
}
//endregion
说明:下面的 “() -> Long”:“()”表示返回一个函数,类型为后面的Long
fun fibonacci() : () -> Long{//斐波那契数列函数
var first = 0L
var second = 1L
return {
val next = first + second
val current = first
first = second
second = next
current
}
}
main方法里面cost(block:() -> Unit)函数的用法:
cost {
//因为“fibonacci()”返回的是一个返回值为Long的函数,因此“fibonacciNext”本质上也是一个函数。
val fibonacciNext = fibonacci()
for (index in 0 .. 10){
println("${fibonacciNext()}")
}
}