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 的想法,但是有 mapfilterorElse 等价物:

val x: Int? = 7                 // ofNullable()

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

我最后写了一个 full comparison here: