Kotlin等同于Java8中的Optional :: map

你知道是否有捷径:

if (x == null) null else f(x) 

对于Java Optional你可以这样做:

 x.map(SomeClass::f) 

Kotlin利用它自己的方法来构思Option ,但是有mapfilter orElse等价物:

 val x: Int? = 7 // ofNullable() val result = x ?.let(SomeClass.Companion::f) // map() ?.takeIf { it != 0 } // filter() ?: 42 // orElse() 

在这种情况下,你可以使用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 ( 链接到文档 ):

 x?.let(SomeClass::f) 

 fun f(n: Int): Int { return n+1 } fun main(s: Array) { val n: Int? = null val v: Int? = 3 println(n?.let(::f)) println(v?.let(::f)) } 

此代码打印:

 null 4 

范围函数完全适合您的用例。 它通常用于涉及可空types的转换。

 if (x == null) null else f(x) 

 x?.let { f(it) } 

xnull ,expression式的结果为null ,否则返回let的结果。