我正在尝试使用Scala Future生成的值:
val x = for (i <- 0 until 100) yield Future(Random.nextInt(arraySize))
对于x的每个值,我想索引到一个数组中:
val y = for (j <- x) yield myArray(j) // doesn't work
val y2 = x map (j => myArray(j)) // doesn't work
myArray
只能以int形式访问。 Scala期货如何做到这一点?
候选解决方案:
val y3 = x.map{ future => future.map(j => myArray(j) }
答案 0 :(得分:4)
您的意思是这样的吗?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits._
import java.util.concurrent.ThreadLocalRandom
val arraySize = 100
val myArray: Vector[String] = Vector.fill(arraySize)("")
val x: Future[IndexedSeq[Int]] = Future.sequence((0 until 100).map{
i =>
Future(ThreadLocalRandom.current.nextInt(arraySize))
})
val y: Future[IndexedSeq[String]] = for {
indices <- x // Future's `map`
} yield for {
i <- indices // IndexedSeq's `map`
} yield myArray(i)
最后一个双for
表达式也可以改写为
x map (_ map myArray)
如果您真的想要它简洁。