斯卡拉:对期货的有条理理解

时间:2015-10-02 17:27:16

标签: scala future for-comprehension

我需要一个for理解来调用 N 方法,这些方法返回Future[Int]并且只产生奇数。以下代码不起作用,因为在第一个偶数结果后,块返回Failure

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

def f1 = Future(1)
def f2 = Future(2)
def f3 = Future(3)
def f4 = Future(4)

for {
  i1 <- f1 if i1 % 2 != 0
  i2 <- f2 if i2 % 2 != 0
  i3 <- f3 if i3 % 2 != 0
  i4 <- f4 if i4 % 2 != 0
} yield ???

如何获得以下结果?

List[Future(1), Future(3)]

1 个答案:

答案 0 :(得分:4)

这样的事情能改变吗?

val futures = List(f1, f2, f3, f4)
Future.sequence(futures).map(_.filter(_ % 2 != 0))

结果是

List(1, 3)