kotlin:lambda表达式的用法

一,代码

class VmListActivity : AppCompatActivity() {

    private lateinit var binding: ActivityVmListBinding   //binding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        //使用binding
        binding = ActivityVmListBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //处理按钮点击事件,创建一个假数据,保存到viewmodel
        binding.button.setOnClickListener {
            //1 . 调用 无参数 Unit 空类型返回值的 Lambda 表达式 , 分别用两种形式进行调用
            println("\n执行 lambda1 调用 : \n")
            println("${lambda1.invoke()}")
            println("${lambda1()}")

            //2 . Int 类型参数 , Int 类型返回值 , 的 Lambda 表达式
            println("\n执行 lambda2 调用 : \n")
            println("${lambda2.invoke(100)}")
            println("${lambda2(100)}")

            //3 . 调用 多行代码的 Lambda 表达式
            println("\n执行 lambda3 调用 : \n")
            println("${lambda3.invoke(200)}")
            println("${lambda3(200)}")

            //4 . 调用 多个参数的 Lambda 表达式
            println("\n执行 lambda4 调用 : \n")
            println("${lambda4.invoke(1, 2)}")
            println("${lambda4(1, 2)}")

            //41. 调用简写形式的lambda表达式,功能同4
            println("\n执行 lambda41 调用 : \n")
            println("${lambda41.invoke(1, 2)}")
            println("${lambda41(1, 2)}")

            //42. 调用简写形式的lambda表达式,功能同4
            println("\n执行 lambda42 调用 : \n")
            println("${lambda42.invoke(1, 2)}")
            println("${lambda42(1, 2)}")

            //5 . 调用 Lambda 表达式类型作为参数的 Lambda 表达式 , 第 3 个参数是 Lambda 表达式类型的参数
            //形式1
            println("\n执行 lambda5 调用 : \n")
            println("${lambda5.invoke(3 , 4 , lambda4)}")
            println("${lambda5(3 , 4 , lambda4)}")
            //形式2 调用时直接传递Lambda 表达式
            val resSub = lambda5(3, 4, {x,y->x-y})
            println("减法表达式,结果:"+resSub)
            //形式3 调用形式改变为把代码写到括号外
            val resMulti = lambda5(3, 4) {x,y->x*y}
            println("乘法表达式,结果:"+resMulti)
        }
    }
}


// 1 . 无参数 Unit 空类型返回值的 Lambda 表达式
var lambda1 : ()-> Unit = { println("lambda1") }

// 2 . Int 类型参数 , Int 类型返回值 , 的 Lambda 表达式
var lambda2 : (Int)-> Int = { a : Int -> a + 1000}

// 3 . 多行代码的 Lambda 表达式, 最后一行是返回值
var lambda3 : (Int)-> Int = { a : Int ->
    println("lambda3 多行代码")
    a + 1000
}

// 4 . 多个参数的 Lambda 表达式
var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->
    println("lambda4 计算 : a + b = ${a + b}")
    a + b
}

// 41 . 简写成一行: 有声明函数类型,函数体中无参数类型
val lambda41 : (Int, Int)->Int = { a,b ->a + b}

// 42 . 简写成一行: 无声明函数类型,函数体中有参数类型,
val lambda42 = { a: Int, b: Int ->a + b}

// 5 . Lambda 表达式类型作为参数的 Lambda 表达式 , 第 3 个参数是 Lambda 表达式类型的参数
var lambda5 : (Int, Int, (Int, Int)->Int)->Int = { a : Int, b : Int, c : (Int, Int)->Int ->
    c.invoke(a, b)
}

二,运行结果:

posted @ 2025-06-28 13:05  刘宏缔的架构森林  阅读(15)  评论(0)    收藏  举报