Scala 从Future获取Int值的优雅方式[Option[Int]]

Scala 从Future获取Int值的优雅方式[Option[Int]],scala,Scala,是否有一种更优雅的方法从Future[Option[Int]]获取Int值,而不是使用finalFuture.value.get.get.get 这就是我到目前为止所做的: val finalFuture: Future[Option[Int]] = result.contents finalFuture.onComplete { case Success(value) => println(s"Got the callback with value

是否有一种更优雅的方法从
Future[Option[Int]]
获取
Int
值,而不是使用
finalFuture.value.get.get.get

这就是我到目前为止所做的:

  val finalFuture: Future[Option[Int]] = result.contents

  finalFuture.onComplete {
              case Success(value) => println(s"Got the callback with value = ", finalFuture.value.get.get.get)
              case Failure(e) => e.printStackTrace
            }

您可以使用
foreach
a=>Unit
函数应用于
选项[a]
中的值(如果存在)

fut.onComplete {
  case Success(opt) => opt.foreach { val =>
    println(s"Got the callback with value = {}", val)
  }
  case Falure(ex) => ex.printStackTrace
}    

您可以使用
foreach
a=>Unit
函数应用于
选项[a]
中的值(如果存在)

fut.onComplete {
  case Success(opt) => opt.foreach { val =>
    println(s"Got the callback with value = {}", val)
  }
  case Falure(ex) => ex.printStackTrace
}    

您还可以使用Try to get Option[Option[Int]]选项,然后展平以获取Option[Int]

def printVal(finalFuture: Future[Option[Int]] ) =  finalFuture.onComplete( 
    _.toOption.flatten.foreach(x=> println (s"got {}",x))
  )

编辑:假设您不关心stacktrace:)

您也可以使用Try-to-get选项[Option[Int]],然后展平以获取选项[Int]

def printVal(finalFuture: Future[Option[Int]] ) =  finalFuture.onComplete( 
    _.toOption.flatten.foreach(x=> println (s"got {}",x))
  )

编辑:假设您不关心堆栈跟踪:)

您可以嵌套匹配项:

finalFuture.onComplete {
  case Success(Some(value)) => println(s"Got the callback with value = ", value)
  case Success(None) => ()
  case Failure(e) => e.printStackTrace
}

您可以嵌套匹配:

finalFuture.onComplete {
  case Success(Some(value)) => println(s"Got the callback with value = ", value)
  case Success(None) => ()
  case Failure(e) => e.printStackTrace
}