kotlin 高阶函数

    科技2022-07-13  128

    参考文献: https://www.bilibili.com/video/BV1Ut4y127xM?from=search&seid=9452703838133087376  郭神讲高阶函数

                        https://blog.csdn.net/yuanguozhengjust/article/details/101296404   kotlin编码规范

    定义

    高阶函数就是以另一个函数作为参数或返回值的函数,Kotlin可以以lambda或参数引用作为参数或返回值,所以,任何以lambda或函数引用作为参数或返回值的都是高阶函数

    基本用法

    三种方式:

    //第一种 双冒号操作符 表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法 val data:Int = num1andnum2(num1,num2, ::plus) println(data) //第二种 匿名函数 val data_two = num1andnum2(num1,num2,fun (num1:Int,num2:Int):Int{ return num1*num2 }) println(data_two) //第三种 前两种方式的语义都非常充分 //lambda作为方法的最后一个参数时,可以移动到括号的外面 val data_three = num1andnum2(num1,num2){ // num1:Int,num2:Int-> num1*num2 //自动推导机制 num1,num2-> num1*num2 } println("第三种方式:"+data_three) } //第一种方式 fun plus(num1: Int,num2: Int):Int{ return num1+num2 } fun minus(num1: Int,num2: Int):Int{ return num1*num2 } //高阶函数 fun num1andnum2(num1:Int,num2:Int,operation:(Int,Int)->Int):Int{ return operation(num1,num2) }

    具体应用

    1)SharedPreferences 的扩展函数

    //扩展函数 //函数类型前面声明函数类型的所属类 fun SharedPreferences.modify(block:SharedPreferences.Editor.()->Unit){ val editor = edit() editor.block() editor.apply() }

    使用:

    getPreferences(Context.MODE_PRIVATE).modify{ putFloat("value",20.5f) putInt("ishappend",0) }

    2)指定条件下查找最大值

    //泛型使用 所有实现Comparable接口的类都是可以比较的 fun <T,R:Comparable<R>> List<T>.findMax(block:(T)->R):T?{ if(isEmpty()) return null var maxElement:T = get(0) var maxValue:R = block(maxElement) for(element:T in this){ if(block(element)>maxValue) maxElement = element } return maxElement } 使用: var list:List<String> = listOf("banana","pear","watermelon","apple") //选出单词最长的那个水果 val result_kotlin: String? = list.findMax { it.length } println(result_kotlin)

     

     

     

     

    Processed: 0.010, SQL: 8