加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用(B => Future [C])函数的未来[[A,B]]到[未来[A,

发布时间:2020-12-16 18:46:02 所属栏目:安全 来源:网络整理
导读:我有一个未来[A [B,B]]和一个从B提供未来[C]的函数. 我需要将Future [Either [A,B]]转换为Future [Aither [A,C]]. 有没有直接的方法来获得未来[A [C,C]]而不是未来[A,未来[C]]]? 我正在考虑这样的事情: val eventuallyInitialValue: Future[Either[A,B]] =
我有一个未来[A [B,B]]和一个从B提供未来[C]的函数.

我需要将Future [Either [A,B]]转换为Future [Aither [A,C]].

有没有直接的方法来获得未来[A [C,C]]而不是未来[A,未来[C]]]?

我正在考虑这样的事情:

val eventuallyInitialValue: Future[Either[A,B]] = ???
val result: Future[Either[A,C]] = for {
  e: Either[A,B] <- initialValue
  c: C <- service.getValue(e.right)
} yield e.right.map(_ => c)

它只是伪代码,因为service.getValue(e.right)不能编译.这样做的正确方法是什么?

解决方法

这就是我想出的:

type B = Int
type A = String
type C = Long
val eitherF: Future[Either[A,B]] = ???
def f(b: B): Future[C] = ???

val mapped: Future[Either[A,C]] = eitherF.flatMap {
  case Left(a) =>
    Future.successful(Left(a))
  case Right(b) =>
    f(b).map(Right(_))
}

基本上你可以平面地绘制未来,然后如果它是左边只是返回成功,如果它是一个权利你可以应用未来并映射一个权利.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读