List 如何在Scala中展平期货列表

List 如何在Scala中展平期货列表,list,scala,flatten,List,Scala,Flatten,我想用这个val: val f = List(Future(1), Future(2), Future(3)) 对它执行一些操作(我正在考虑扁平化) 然后得到这个结果 scala> f.flatten = List(1,2,3) 如果展平方法在这里不合适,也可以。只要我能得到结果 谢谢 Future.sequence获取一个List[Future[T]]并返回一个Future[List[T] 你能行 Future.sequence(f) 然后在上面使用map或onComplete访

我想用这个val:

val f = List(Future(1), Future(2), Future(3))
对它执行一些操作(我正在考虑扁平化)

然后得到这个结果

scala> f.flatten = List(1,2,3)
如果展平方法在这里不合适,也可以。只要我能得到结果


谢谢

Future.sequence
获取一个
List[Future[T]]
并返回一个
Future[List[T]

你能行

Future.sequence(f) 

然后在上面使用
map
onComplete
访问值列表。

如果一个
未来
s失败,您希望发生什么?如果任何未来失败,那么我希望整个事情失败。这是家庭作业问题的一部分,所以我不想让整个问题为我解决。但基本上,我仍然需要弄清楚如何确定是否有任何期货失败,如果失败了,我就结束整个过程。这是我得到的输出:scala.concurrent.Future[List[Int]]=scala.concurrent.impl.Promise$DefaultPromise@3227f076这是预期的吗?它正在将一个列表[Future[T]]转换为一个未来的[List[T]]。但是我一直在期待类似的东西:scala.concurrent.Future[List[Int]]=Future(List(1,2,3))谢谢!是的,这是一个
未来
。现在您可以处理它(映射、使用onComplete或任何您想要的东西)。如果成功,
Future
中的结果将是您的列表
Future
通常不会打印其中的内容(这意味着阻止)。如果您执行
Future(1)
,您将得到类似于
scala.concurrent.impl.Promise的东西$DefaultPromise@78393fdb
。对于测试,您可以使用类似于
wait.result(f,2.seconds)
@mikejones1477的东西,几乎总是最好不要阻塞。考虑异步处理结果。我不打算为了最后的结果而拦网。但是出于学习的兴趣,我想问一下异步是什么意思?
Future.sequence(f)