Java8 中 Optional::map 的 Kotlin 等价物
Kotlin equivalent for Optional::map in Java8
你知道有没有捷径:
if (x == null) null else f(x)
对于 Java Optional
你可以这样做:
x.map(SomeClass::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
你可以在这种情况下使用 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)
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:
你知道有没有捷径:
if (x == null) null else f(x)
对于 Java Optional
你可以这样做:
x.map(SomeClass::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
你可以在这种情况下使用 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)
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: