Kotlin_lambda expression

Kotlin_lambda expression


Lambda expressions introduced in Java8, this is the most Java developers excitement and anticipation of a function. Lambda expressions that what is it?

Lambda is the expression essentially short code is transmitted to the other functions, in our previous Java or Kotlin, the parameters of a function may be a simple basic data types of variables or instance variables of an object. Lambda expressions can occur so that we can put a piece of code as a value to treat, because it is a value, it can be passed, so Lambda can be passed as parameters to other functions. Lambda expressions appear, so that our code more concise.

Optimization 1.lambda expression

fun main(args: Array<String>) {
    //lambda表达式的优化
    val a = 10
    val b = 20
    val r1 = ca3(a,b){a,b->
        a+b
    }
    val r2 = ca3(a,b){a,b->
        a*b
    }
    println("$r1,$r2")
}

fun ca3(a1: Int,a2: Int,bolck:(Int,Int)->Int):Int{
    var res = bolck(a1,a2)
    return res
}

Result
30
200

2. anonymous function

fun main(args: Array<String>) {

    var a = 10
    var b = 20
    var r1 = 0
    //匿名函数为lambda表达式

    r1 = ca1(a,b,{a,b->
        a+b

    })
    println(r1)
    var r2 = ca1(a,b,{a,b->
        a * b

    })
    println(r2)
}
fun ca1(a1: Int,a2: Int,bolck:(Int,Int)->Int):Int{
    var res = bolck(a1,a2)
    return res
}

Result
30
200

3. Simple lambda expressions

() And invoke

fun main(args: Array<String>) {

//    {
//        println("1")
//    }()
    {
        println("2")
    }.invoke()
}

Result
2

4. There is a lambda expression parameter

fun main(args: Array<String>) {
//    val res = {a:Int,b:Int->
//        a+b
//    }(10,20)
//    println(res)
    val res1 = {a:Int,b:Int->
        a+b
    }.invoke(10,20)
    println(res1)
}

Result
30

5.invoke features

You can accept null

fun main(args: Array<String>) {
//    val block:()->Unit =
//    {
//        println("1")
//    }
//    block()
//    block.invoke()
    val block1:(()->Unit)? = null
    {
        println("1")
    }
    block1?.invoke()
}

Results
1

6.lambda expression _it

When only one parameter can use it.

fun main(args: Array<String>) {

    var a = 10
//    val res = ca4(a, {a ->Int
//      a+10
//    })
//    println(res)
    //当只有一个参数的时候可以用到it
    var res1 = ca4(a,{it
    it+10
    })
    println(res1)
}
fun ca4(a1: Int,bolck:(Int)->Int):Int{
    return bolck(a1)
}

Result
20

7.lambda expression _foreach

fun main(args: Array<String>) {
    var str = "里斯"

    str.forEach ({ char->
        println(char)
    })
    //lambda表达式优化,括号迁移
    str.forEach() {char->
        println(char)
    }
    //当括号中没有参数的时候可以省略
    str.forEach { char->
        println(char)
    }
    //lambda表达式只有一个参数,可以使用it
    str.forEach {
        println(it)
    }
}

The results
in
Si
in
Si
in
Si
in
Si

lambda expression is optimized when the migration parentheses, brackets if no time parameter may be omitted parentheses

8.lambda expression _indexoffirst

The first character to determine whether a character. Then return to index

fun main(args: Array<String>) {
    val arrayOf = arrayOf("11", "21", "13")
    //判断第一个字符为1开头的索引
    var index = arrayOf.indexOfFirst { it
        it.startsWith("1")
    }
    println(index)
}

Results
0

9. Note

General lambda expression returns the last line

fun main(args: Array<String>) {
    val res = {
        "a"
        println("1")

    }()
    //lambda表达式返回最后一行
    println(res)
}

Results
1

发布了165 篇原创文章 · 获赞 12 · 访问量 1万+

Guess you like

Origin blog.csdn.net/qq_43141726/article/details/104615996