Kotlin_lambda式
記事のディレクトリ
Java8で導入されたラムダ式は、この機能のほとんどのJava開発者の興奮と期待です。それはどのようなラムダ式であることを?
ラムダは、我々の以前のJavaまたはKotlinに、関数のパラメータは、オブジェクトの変数またはインスタンス変数の単純な基本的なデータ・タイプであってもよいし、実質的に短いコードは、他の機能に送信される式です。ラムダ式は、それが値であるため、ラムダは、他の関数にパラメータとして渡すことができるので、それは、渡すことができ、我々は御馳走に値としてコードの一部を置くことができるように発生する可能性があります。ラムダ式は、ので、私たちのコードより簡潔に表示されます。
最適化1.lambda式
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
}
結果
30
200
2.無名関数
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
}
結果
30
200
3.簡単なラムダ式
()と呼び出し
fun main(args: Array<String>) {
// {
// println("1")
// }()
{
println("2")
}.invoke()
}
結果
2
4.ラムダ式のパラメータがあります
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)
}
結果
30
5.invoke機能
あなたはヌルを受け入れることができます
fun main(args: Array<String>) {
// val block:()->Unit =
// {
// println("1")
// }
// block()
// block.invoke()
val block1:(()->Unit)? = null
{
println("1")
}
block1?.invoke()
}
結果
1
6.lambda発現_it
ときにのみ1つのパラメータがそれを使用することができます。
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)
}
結果
20
7.lambda発現_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)
}
}
結果
で
のSi
中
のSi
で
のSi
中
のSi
移行括弧は、括弧は時間パラメータは括弧を省略することはできない場合ときに、ラムダ式が最適化されます
8λの発現_indexoffirst
最初の文字は文字かどうかを判断します。そして、インデックスに戻ります
fun main(args: Array<String>) {
val arrayOf = arrayOf("11", "21", "13")
//判断第一个字符为1开头的索引
var index = arrayOf.indexOfFirst { it
it.startsWith("1")
}
println(index)
}
結果
0
9.注意
一般的なラムダ式は、最後の行を返します。
fun main(args: Array<String>) {
val res = {
"a"
println("1")
}()
//lambda表达式返回最后一行
println(res)
}
結果
1