我的代码如下:
val f1 = Future(genA1)
val f2 = Future(genA2)
val f3 = Future(genA3)
val f4 = Future(genA4)
val results: Future[Seq[A]] = for {
a1 <- f1
a2 <- f2
a3 <- f3
a4 <- f4
} yield Seq(a, b, c, d)
现在我有一个要求可选择排除a2,如何修改代码? (也可以使用map或flatMap)
此外,如果我有可能的未来需要像上面那样进行汇总,并且M中的N可以选择性地排除某些标志(商业逻辑),我应该如何处理它?</ p>
提前感谢!
莱昂
答案 0 :(得分:2)
在问题1中,我理解你想从给定一些逻辑和问题2的序列中排除一个条目(例如B),你想要从总共M中抑制N个条目,并且在这些结果上计算未来。我们可以将这两种情况概括为:
// Using a map as simple example, but 'generators' could be a function that creates the required computation
val generators = Map('a' -> genA1, 'b' -> genA1, 'c' -> genA3, 'd' -> genA4)
...
// shouldAccept(k) => Business logic to decide which computations should be executed.
val selectedGenerators = generators.filter{case (k,v) => shouldAccept(k)}
// Create Seq[Future] from the selected computations
val futures = selectedGenerators.map{case (k,v) => Future(v)}
// Create Future[Seq[_]] to have the result of computing all entries.
val result = Future.sequence(futures)
一般来说,我认为您正在寻找的是Future.sequence
,它需要Seq[Future[_]]
并生成Future[Seq[_]]
,这基本上就是您“手动”做的事情。换理解。