gpt4 book ai didi

scala - Future[Either[A, B]] 到 Future[Either[A, C]] 使用 (B => Future[C]) 函数

转载 作者:行者123 更新时间:2023-12-04 16:31:04 26 4
gpt4 key购买 nike

我有一个 Future[Either[A, B]]以及提供 Future[C] 的函数来自 B .

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

有没有直接获取Future[Either[A, C]]的方法而不是 Future[Either[A, Future[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(_))
}

基本上可以 flatMap future ,如果是左,则返回成功,如果是右,则可以应用 future 并映射 Right到它。

关于scala - Future[Either[A, B]] 到 Future[Either[A, C]] 使用 (B => Future[C]) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38013323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com