Kotlin之lambda表达式

Kotlin高阶用法
lambda表达式

  1. 基本语法
    在这里插入图片描述

  2. 返回值
    lambda 表达式 总是返回函数体内部最后一行表达式的值

  3. 作用域
    在java函数中内部定义一个匿名类或者lambda,内部类访问的函数局部变量必须是final的,内部类是无法修改函数局部变量的值。

    Kotlin的内部类或者lamda中,不仅可以访问final 的变量,也可以访问非final的变量,也就是说在lamda内部可以直接修改函数局部变量的值。

  4. 实战

//android lamda表达式

class MainActivity : AppCompatActivity() {

    private val button: Button by lazy { findViewById(R.id.button_center) }
    @SuppressLint("ShowToast")
    private fun multiply(a: Int, b: (c: Int, d: Int) -> Int, e: Int) = a + b.invoke(1, 2) + e
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                    .replace(R.id.container, MainFragment.newInstance())
                    .commitNow()
        }
        button.setOnClickListener {
            it.visibility = View.GONE
            Toast.makeText(this,"you have clicked it !",Toast.LENGTH_LONG)
        }

        val add = { a: Int, b: Int -> a + b }
        val x = add(1, 2)

        val addOp = fun Int.(other: Int) : Int = this + other
        print(1.addOp(2))

        multiply(10, { a: Int, b: Int -> a + b }, 20)

        var sum: Int = 0
        var arr = arrayListOf<Int>(1, 2, 3)
        arr.filter {
            it < 7
        }.forEach {
            sum += it
        }
        arr.apply {
            this.add(1)
            this.add(this@MainActivity.multiply(1, { a: Int, b: Int -> a - b }, 2))
        }
        val dataList : MutableList<String> = mutableListOf("ok")
        TestAdapter(this, dataList).setOnClickListener {
            position, context -> Toast.makeText(this,"you have clicked $position is $context !",Toast.LENGTH_LONG)
        }

    }


}
class TestAdapter(val context: Context, var dataList: MutableList<String>): RecyclerView.Adapter<TestAdapter.ViewHolder>() {
    private var mListener: ( (Int, String) -> Unit ) ? = null

    fun setOnClickListener(mListener: (pos : Int, item : String) -> Unit) {
        this.mListener = mListener
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestAdapter.ViewHolder {
        TODO("Not yet implemented")
    }

    override fun onBindViewHolder(holder: TestAdapter.ViewHolder, position: Int) {
        TODO("Not yet implemented")
        holder.itemView.setOnClickListener {
            mListener?.invoke(position, dataList[position])
        }
    }

    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }

    class ViewHolder(item: View):RecyclerView.ViewHolder(item)


}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值