第六章 Kotlin 函数进阶 - 高阶函数

1. 定义

高阶函数就是参数类型包含函数类型,或者返回一个函数类型。高就函数就是函数里面套函数

1.1 参数类型包含函数类型

1.2 返回值为函数类型

1.3 常见的高阶函数

1.3.1 forEach

1.3.1.1 forEach函数定义

forEach迭代了集合,把集合中的每个元素拿出来,依次去执行某一个操作,element是集合中的元素。

inline fun IntArray.forEach(action: (Int) -> Unit): Unit {
    for (element in this) action(element)
}
1.3.1.2 forEach函数的使用
fun main() {
    // forEach调用方法一:
    // 传引用 ::println 的函数类型是 (Int) -> Unit
    intArray.forEach(::println)
    
    intArray.forEach({println("Hello $it")})

    // forEach的参数就只有一个 action: (Int) -> Unit
    // 如果不是只有一个,是最后一个,也可以把{...} 从()中移到括号的右边
    intArray.forEach(){println("Hello $it")}

    // 因为()中没有参数,所以可以省略
    // 只有一个lambda表达式作为参数可以省略小括号
    intArray.forEach{println("Hello $it")}
    
    

    // forEach调用方法二:
    val e = floatArrayOf(1.0f, 1.1f, 1.2f)

    e.forEach {
        println(it) // println是函数forEach()的入参action (Int) -> Unit
    }
}

1.3.2 map

迭代了一个集合,把集合中的每个元素都拿出来,但是map是把拿出来的元素转换成另一个元素,然后得到一个新的List<R>, map是一个类型到另一个类型的转换

// R : 返回值元素类型
// transform: 函数类型
// map: 接受的参数类型是transform--->函数参数作为参数
// (Int) -> R: 把元素类型Int类转换成R类型, R是泛型
// mapTo: 是另一个高阶函数
inline fun<R> IntArray.map(transform: (Int) -> R): List<R> {
    return mapTo(ArrayList<R>(size), transform)
}

1.3.3 更多的高阶函数

// 计算函数执行的耗时时间
fun cost(block: () -> Unit) {
    val start = System.currentTimeMillis()
    block()
    println(Systen.currentTimeMillis() - start)
}

// 返回类型为函数类型
fun fibnacci(): () -> Long {
    val first = 0L
    var second = 1L
    
    return {
        val next = first + second
        var current = first
        first = second
        second = next
        current 
    }
}

fun main() {
    cost {
        val fibonacciNext = fibonacci() // 这是cost的入参
        for (i in 0..10) {
            println(fibnacciNext())
        }
    }
}

小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值