首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Future[Option[A]]转换为Future[A]

如何将Future[Option[A]]转换为Future[A]
EN

Stack Overflow用户
提问于 2021-01-15 14:04:28
回答 3查看 63关注 0票数 1

我是Scala的新手,我想知道如何将Future[Option[A]]转换为Future[A]

EN

回答 3

Stack Overflow用户

发布于 2021-01-15 14:16:44

由于Option[A]可能为None,因此如果想将其转换为A,最直接的方法是使用.getOrElse(value)方法,其中需要提供A类型的默认值,以便在选项本身没有默认值时使用。

代码语言:javascript
运行
复制
val opt1 = Some(3)
opt1.getOrElse(5) //returns 3

val opt2 = None
opt2.getOrElse(5) //returns 5

然后,如果您有一个Future[Option[A]],您希望在将来的.map方法中执行此操作:

代码语言:javascript
运行
复制
val futureOpt: Future[Option[Int]] = Future{ Some(3) }
val future: Future[Int] = futureOpt.map{opt => opt.getOrElse(5)}
票数 5
EN

Stack Overflow用户

发布于 2021-01-15 17:30:53

Option[A]可以是Some[A]NoneSome[A]的例子很简单,你可以从中得到A。但是对于None的情况,您可以提供一个默认值,也可以将其视为失败。

使用缺省值,

代码语言:javascript
运行
复制
val aDefault: A = ...

val aFuture1 = aOptionFuture.map({
  case Some(a) => a
  case None => aDefault
})

// or

val aFuture2 = aOptionFuture.map(_.getOrElse(aDefault))

考虑一下失败,

代码语言:javascript
运行
复制
val aFuture3 = aOptionFuture.flatMap({
  case Some(a) => Future.successful(a)
  case None=> Future.failed(new Exception("computed a None"))
})
票数 3
EN

Stack Overflow用户

发布于 2021-01-15 20:04:54

代码语言:javascript
运行
复制
val optFuture: Future[Option[Int]] = Future(Some(3))
optFuture.map {
  case Some(v) => v
  case None => throw new RuntimeException("<some-exception>")
}

代码语言:javascript
运行
复制
optFuture.map(_.getOrElse(throw new RuntimeException("<some-exception>")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65731237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档