Kotlin相当于Java8中的Optional :: map

时间:2018-01-26 17:19:42

标签: kotlin nullable

您知道是否有快捷方式:

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

对于Java Optional,您可以这样做:

x.map(SomeClass::f)

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您可以尝试letlink 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

答案 2 :(得分:3)

你可以在这种情况下使用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)