【问题标题】:Kotlin equivalent for Optional::map in Java8Java8 中 Optional::map 的 Kotlin 等效项
【发布时间】:2018-01-26 17:19:42
【问题描述】:

你知道是否有以下快捷方式:

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

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

x.map(SomeClass::f)

【问题讨论】:

    标签: kotlin nullable


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        你可以试试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
        

        【讨论】:

        • 我真的不明白为什么你的答案被否决了......但别担心,我认为我检查了你的答案也可以,这是一个加一 (Y)
        • @DamianLattenero 实际上我也不明白!但这同样适用于您的答案:)
        猜你喜欢
        • 2010-10-15
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2019-10-15
        • 2017-10-28
        • 1970-01-01
        相关资源
        最近更新 更多