Kotlin等同于Java8中的Optional :: map
你知道是否有捷径:
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 // 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) }
当x
为null
,expression式的结果为null
,否则返回let
的结果。
- Kotlin:可转让的“它”?
- 从kotlin调用java varargs方法
- Kotlin DialogFragment editText可编辑始终为空
- OpenCV HoughLinesP如何检测线是相交?
- Anko日志记录方法无法解决
- kotlin别名属性代表抛出异常
- RegisterResGeneratingTask已弃用,请使用registerGeneratedFolders(FileCollection)
- 如何在Kotlin的重载操作符上指定generics?
- kotlin android – Xposed IllegalArgumentException'android.content.res.CoollifeUITpedArray'