如何在scala中获得两者的结果

peo*_*eon 2 scala future

我有两个功能

f1() => Future[T] 
f2(t: T) => Future[T1]
Run Code Online (Sandbox Code Playgroud)

我可以得到T1

f1().flatMap(t => f2(t))
Run Code Online (Sandbox Code Playgroud)

但我想得到T和T1,例如(T,T1),我该怎么办呢

ada*_*mwy 6

您可以在flatMap中映射f2的结果:

f1().flatMap(t => f2(t).map((t, _)))
Run Code Online (Sandbox Code Playgroud)

或使用for-understanding:

for {
  t <- f1()
  t1 <- f2(t)
} yield (t, t1)
Run Code Online (Sandbox Code Playgroud)

或者,您可以将两个期货压缩为一个返回元组的期货:

val a = f1()
val b = a.flatMap(f2)
val c = a zip b
Run Code Online (Sandbox Code Playgroud)