Kotlin-高阶函数(成员函数和扩展函数)

高阶函数的使用:

package com.init.demo.test

fun main(args: Array<String>) {
    /**
     * 高阶函数是一个接受一个函数类型的函数
     * 高阶函数是一个返回一个函数类型的值
     */
    val cc = arrayOf(1, 2, 3, 4, 5)
    val dd = cc.filter { it > 3 }

    /**
     * { it > 3 }是一个lambda表达式 作为filter 唯一的也是最后一个的参数调用可以省略圆括号
     * it代表array中的每一个元素:
     * filter函数源码:public inline fun <T> Array<out T>.filter(predicate: (T) -> Boolean): List<T> {
     *                   return filterTo(ArrayList<T>(), predicate)
     *                 }
     *  filterto函数源码 : public inline fun <T, C : MutableCollection<in T>> Array<out T>.filterTo(destination: C, predicate: (T) -> Boolean): C {
     *                     for (element in this) if (predicate(element)) destination.add(element)
     *                     return destination
    }
     */
    println(dd)

    val ee = arrayOf("Aa", "bB", "Cc", "cccc")
    val ff = ee.filter { it.contains("c") }
    println(ff)

    println("*****************************************************顶层函数的引用*****************************************")
    fun isEven(a: Int) = a % 2 == 0
    //注意:“::”一元操作符要写在函数名之前,花括号要改成函数正式调用的圆括号
    val dd1 = arrayOf(1, 2, 3, 4, 5).filter { isEven(it) }
    val gg = arrayOf(1, 2, 3, 4, 5).filter(::isEven)
    println(dd1)
    println(gg)
    println("dd1和gg是否等阶:" + (dd1 == gg))
    println("*****************************************************成员函数和扩展函数的引用*****************************************")
    //使用函数引用的好处是可以简化写法,利用已有的函数省略参数,常规完整写法
    var valueMin1 = comboTwoValue2(1, -3) { a, b -> Math.min(a, b) }
    println(valueMin1)
    //简化写法,这里的min属于Math类的成员函数
    var valueMin2 = comboTwoValue2(-1, 3, Math::min)
    println(valueMin2)

    //扩展函数简单引用
    fun Int.isOdd() = this % 1 == 0
    //可以向成员函数那样引用扩展函数
    val allOldNumbers = arrayOf(5,4,3).filter (Int::isOdd)
    println(allOldNumbers)


    val ee1 = arrayOf("Aa", "bB", "Cc", "cccc")
    val x = ee1.filter ("Cc"::equals)
    println(x)
}

fun comboTwoValue2(x: Int, y: Int, method: (a: Int, b: Int) -> Int): Int {

    return method(x, y)
}

输出:

[4, 5]
[Cc, cccc]
*****************************************************顶层函数的引用*****************************************
[2, 4]
[2, 4]
dd1和gg是否等阶:true
*****************************************************成员函数和扩展函数的引用*****************************************
-3
-1
[5, 4, 3]
[Cc]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值