美文网首页工具癖程序员
Kotlin的Lambda编程(一)

Kotlin的Lambda编程(一)

作者: 神山上人 | 来源:发表于2018-10-23 09:28 被阅读13次

    一,何为Lambda?

    本质上就是可以传递给其他函数的一小段代码

    二,Lambda的作用

    可以轻松的把通用的代码结构去程库函数,常见就是和集合一起工作,能够有效的缩短代码,使得代码更加简洁,在Kotlin中就使用了大量的Lambda表达,并且Kotlin的和java的能够无缝连接。

    三,Lambda表达式和成员引用

    java的点击事件会以内部类的形式进行操作,如下

    button.setOnClickListener(new OnClickListener(){
    @override
    public void onClick(View view){
    }
    });

    然而kotlin可以这样

    button.setOnClickListener{
    //操作
    }
    也可以这样
    button.setOnClickListener{ view->
    //操作
    }
    对比一下我们看起来是不是简单多了,是不是看起简单多了,代码看起来既美观也简洁,这还不算什么,好戏还在后面。

    Lamdba与集合

    继续我们的操作
    一个集合 val list = listOf(Person("张三",22),Person("李四",33))
    找出里面最大的年龄,当然你可以写一个方法进行再循环中判断查找,如果这样做你就是太Low了,现在告诉你们最简单的方法
    list.maxBy{it.age} 这样就OK了,一句话搞定。是不是很神奇,其实这就会Kotlin内置的库函数 我们直接调用就完事,其中的 it.age就是实现这个逻辑的Lamdba,里面进行年龄的判断工作。

    Lambda表达式的语法

    {x:Int,y:Int -> x+y} 始终在大括号里面,在符号->前面的是参数,后面的函数体。例如:
    val sum = {x:Int,y:Int -> x+y}
    println(sum(1,2))

    Kotlin有这样的一种语法约束,如果Lambda表达式是函数调用的最后一个实参,它可以放到括号的外边。

    people.maxBy(){p:Person ->p.age}
    

    当是唯一实参的时候,还可以去掉代码中的空括号对。Lambda还对类型可以进行类型的推导,上面的Person类型可以省略。使用默认参数也可以 it代替

    使用默认参数名称

    people.maxBy { it.age }  //其中it是自动生成的参数名称
    

    在作用域中访问变量

    Lambda中使用函数参数

    fun test(message:Collection<String>,msg:String){
        messages.forEach{
            Log.d("tag","$msg $it")
        }
    }
    

    Kotlin中不会仅限于访问final变量,在Lambda内部可以修改这些变量

    注意:
    Java只允许你捕捉final变量,Kotlin可以访问非final,并可以修改它们。

    成员引用

    val getAge = Person::age//这个地方后面可以用泛型方式代替Person。
    Person::age  //类和成员,前面是类,后面是成员。
    //引用顶层函数 可以省略类直接写冒号。
    fun salute() = println("sssss")
    run(::salute)
    

    这种省略了类名称,直接以冒号开头,成员引用::name被当做实参进行传递给run,它会掉相应的函数。
    这部分到此结束!!
    后面还有 集合的函数式API等用法,下期详解.....

    作者写作不易,希望小小鼓励 ,将会是我前进的动力。欢迎指正。

    相关文章

      网友评论

        本文标题:Kotlin的Lambda编程(一)

        本文链接:https://www.haomeiwen.com/subject/cqpgzftx.html