高阶函数与lambda表达式

高阶函数与lambda表达式

Lambda表达式格式要求:
  • 一个lambda表达式总是被一对花括号所包围。
  • 其参数(如果有的话)位于->之前(参数类型是可以省略的)
  • 执行体位于 —>之后
val multiply: (Int, Int) -> Int = { a, b -> a * b } //multiply变量接收2个Int参数,并返回一个Int参数,在{}中执行方法体
val substract = { a: Int, b: Int -> a - b }//substract变量没有指定参数,但是在{}中指定参数为Int并返回Int值
val myAction = { println("hello world") }
val mayReturnNull: (Int, Int) -> Int? = { _, _ -> null }
val functionMaybeNull: ((Int, Int) -> Int)? = null
//前2种在实际开发中常用的。

在kotlin中,如果一个函数的最后一个参数是个函数,那么可以将lambda表达式作为实参传递进去,并且可以在调用时方法圆括号外去使用。如下:

fun myCalculate(a: Int, b: Int, calcute: (Int, Int) -> Int): Int {
    return calcute(a, b)
}

fun main(args: Array<String>) {
    println(myCalculate(3, 4, { x, y -> x + y }))//7
    //等价于
    println(myCalculate(3, 4) { x, y -> x + y })
}
高阶函数:

扩展函数使用

fun String.filter(predicate: (Char) -> Boolean): String {
    val sb = StringBuilder()
    for (index in 0 until length) {
        val element = get(index)
        if (predicate(element)) {
            sb.append(element)
        }
    }
    return sb.toString()
}

fun main(args: Array<String>) {
    val str = "hellp24world90"
    println(str.filter { it.isLetter() }) //当一个参数的时候可以使用it
}

高阶函数关键字的使用:

fun main(args: Array<String>) {
    val strings = arrayOf("hello", "world", "helloworld", "welcome")
    strings.filter { it.contains("h") }.forEach { println(it) }
    println("----------------")
    strings.filter { it.length > 6 }.forEach { println(it) }
    println("----------------")
    strings.filter { it.endsWith("d", false) }.map { it.toUpperCase() }.forEach { println(it) }
}
maxBy 返回的是集合     数组.maxBy{  it.age } 返回的是当前数组中最大的年龄对象
filter 筛选  数组.filter  {  it.age>18 and height>169  } 返回的是对象
map 把某个属性映射成一个集合   数组.map {  "&{it.name}: &{it.age}"}返回的是小小:15,按时:46 数组
any  查找数组中是否有满足的条件。 数组.any {  it.age=15 }  返回bolean 类型
count  统计。 数组.count   {  it.age=15 }  返回统计的数字
find   查找 。 数组.find     {  it.age=15 }  返回第一个满足当前条件的对象
groupBy  分组 。数组.groupBy     {  it.age }.get( 15 ).forEach(  print( it )  )  分类返回当前的类别数组
闭包:
fun main(args: Array<String>) {
    var sum = ""
    val strings = arrayOf("hello", "worlds", "bye")
    strings.filter { it.length > 3 }.forEach {
        sum += it
    }
    println(sum) //helloworlds  在高阶函数体内可以使用成员变量
}
解构声明:

使用解构一个方法可以返回2,3个值

data class MyResult(val result: String, val status: Int)

fun myMethod(): Pair<String, Int> {
    return Pair("success", 1)
}

fun myMethod3(): Triple<String, Int, String> {
    return Pair("success", 1, "w3r4")
}

fun myMethod2(): MyResult {
    return MyResult("success", 1)
}

fun main(args: Array<String>) {
    val (result, status) = myMethod2()
    println("$result,$status")
    println("--------------")
    val (result2, status2) = myMethod()  //解构声明可以一个方法返回2个值或是3个值
    println("$result2,$status2")
    println("--------------")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值