• Kotlin中的Lambda表达式基本定义和使用


    Kotlin中,Lambda表达式是一种简洁的方式来定义匿名函数。Lambda表达式可以作为函数的实际参数或者返回值,使得函数成为高阶函数。本篇博客将介绍Lambda表达式的基本概念以及使用方法,并提供相关的示例代码。

    Lambda表达式的基本概念

    Lambda表达式的基本语法如下:

    val lambdaName = { parameters -> lambdaBody }
    
    • 1
    • lambdaName 是一个变量,用于存储Lambda表达式。
    • parameters 是Lambda表达式的参数列表。
    • lambdaBody 是Lambda表达式的函数体,包含了执行的代码逻辑。

    Lambda表达式的返回值类型和返回值由函数体中最后一条语句决定。在每次调用Lambda表达式时,不管方法体里面的语句执行多少条,返回值的类型和返回值都是由方法体中最后一条语句决定的。

    Lambda表达式的示例

    以下是一些Lambda表达式的示例代码:

    // 无参数有返回值的Lambda表达式
    val lambdaFun1 = {
        println("Lambda表达式无参数有返回值") // 函数体
    }
    lambdaFun1()
    
    // 有参数有返回值的Lambda表达式
    val sum = { a: Int, b: Int ->
        a + b
    }
    println(sum(6, 8))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述代码中,第一个示例演示了无参数有返回值的Lambda表达式。我们使用变量lambdaFun1存储Lambda表达式,然后通过调用lambdaFun1()来执行Lambda表达式中的代码逻辑。

    第二个示例演示了有参数有返回值的Lambda表达式。我们定义了一个Lambda表达式sum,它接受两个参数ab,并返回它们的和。通过调用sum(6, 8)来计算并输出结果。

    高阶函数的使用

    高阶函数是指接受一个或多个函数作为参数,或者返回一个函数的函数。Lambda表达式的使用使得高阶函数在Kotlin中更加简洁和易用。

    以下是一个使用高阶函数的示例代码:

    // 函数作为参数使用
    fun IntRange.pickNum(function: (Int) -> Boolean): List<Int> {
        var resultList = mutableListOf<Int>()
        for (i in this) {
            if (function(i)) {
                resultList.add(i)
            }
        }
        return resultList
    }
    
    // 调用高阶函数
    var list = 1..20
    println("能被5整除的数")
    println(list.pickNum { x: Int -> x % 5 == 0 })
    println("能被10整除的数")
    println(list.pickNum { x: Int -> x % 10 == 0 })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在上述代码中,我们定义了一个扩展函数pickNum,它接受一个函数作为参数,并根据函数的逻辑选择符合条件的数字。通过调用pickNum函数并传递Lambda表达式作为参数,我们可以筛选出满足条件的数字,并输出结果。

    函数作为返回值

    Lambda表达式不仅可以作为函数的参数,还可以作为函数的返回值。以下是一个使用函数作为返回值的示例代码:

    enum class USER {
        NORMAL, VIP
    }
    
    fun getPrice(userType: USER): (Double) -> Double {
        if (userType == USER.NORMAL) {
            return { it }
        }
        return { price -> price * 0.88 }
    }
    
    // 调用函数并使用返回的Lambda表达式
    var normalUserPrice = getPrice(USER.NORMAL)(200.0)
    println("普通用户价格:$normalUserPrice") // 普通用户价格:200.0
    
    var vipUserPrice = getPrice(USER.VIP)(200.0)
    println("VIP会员价格:$vipUserPrice") // VIP会员价格:176.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在上述代码中,我们定义了一个枚举类型USER,用于表示用户类型。函数getPrice接受一个USER类型的参数,并根据用户类型返回一个Lambda表达式。如果用户类型是USER.NORMAL,则返回一个恒定函数{ it },该函数返回传入的参数。如果用户类型是USER.VIP,则返回一个计算折扣后价格的函数{ price -> price * 0.88 }

    通过调用getPrice函数并传入不同的用户类型参数,我们可以获取相应用户类型的价格计算函数。然后,我们可以通过传入价格参数来调用返回的Lambda表达式,计算并输出相应的价格。

  • 相关阅读:
    前端网络请求性能优化之缓存
    【云原生】这么火,你不来了解下?
    10月28日
    Python视频剪辑-Moviepy视频尺寸和颜色调整技巧
    【康耐视国产案例】AI视觉相机创新 加速商超物流数智化转型
    C++入门学习2-指针与整型数组(Clion)
    Linux Ext2/3/4文件系统
    面向对象设计原则总结:SOLID/LKP/DRY/KISS…
    Game Maker 基金会呈献:归属之谷
    极客君的人生咨询
  • 原文地址:https://blog.csdn.net/qq_29752857/article/details/133970643