【发布时间】:2018-01-26 17:19:42
【问题描述】:
你知道是否有以下快捷方式:
if (x == null) null else f(x)
对于 Java Optional,您可以这样做:
x.map(SomeClass::f)
【问题讨论】:
你知道是否有以下快捷方式:
if (x == null) null else f(x)
对于 Java Optional,您可以这样做:
x.map(SomeClass::f)
【问题讨论】:
Kotlin 对 Option 的想法使用了自己的方法,但也有 map、filter、orElse 等价物:
val x: Int? = 7 // ofNullable()
val result = x
?.let(SomeClass.Companion::f) // map()
?.takeIf { it != 0 } // filter()
?: 42 // orElseGet()
我最终写了一个full comparison here:
【讨论】:
在这种情况下,您可以使用 let,如下所示:
fun f(x : Int) : Int{
return x+1
}
var x : Int? = 1
println(x?.let {f(it)} )
=> 2
x = null
println(x?.let {f(it)} )
=> null
正如@user2340612所说,写法也是一样的:
println(x?.let(::f)
【讨论】:
你可以试试let (link to documentation):
x?.let(SomeClass::f)
fun f(n: Int): Int {
return n+1
}
fun main(s: Array<String>) {
val n: Int? = null
val v: Int? = 3
println(n?.let(::f))
println(v?.let(::f))
}
此代码打印:
null
4
【讨论】: