[英]scala how to print a Future.sequence
我有这个构造:
projectDao.getProjectIdsByUserId(userId).map(ids => ids.map(id => toProject(id, userId)))
.map(Future.sequence(_)) /* transform Future[Seq[Future[...]]] to Future[Future[Seq[...]]] */
如何在控制台中打印此结果?
在项目数据中应该是我要在控制台中打印的城市
那有可能吗?
谢谢
我相信最直接的方法是通过一个foreach
函数,例如:
val future = Future(...)
future.foreach(println)
请注意,我分别调用foreach
,在调用链中使用它会导致不同的结果类型。
在您的情况下,如果您具有Future[Future[...]]
,则需要调用flatten
以获得平坦的Future[...]
,但我想您可以仔细检查您的链并也许替换其中一个使用flatMap
进行map
调用,以简化操作。 我猜可能是这样的:
projectDao
.getProjectIdsByUserId(userId)
.map(ids => ids.map(id => toProject(id, userId)))
.flatMap(Future.sequence(_))
然后将其放在某个地方并记录:
val results = projectDao.getPro...
results.foreach(println)
或者您可以使用Future.traverse
:
Future.traverse(projectDao.getProjectIdsByUserId(userId)) { id =>
log.info(...)
toProject(id, userId)
}
创建与您的原始问题匹配的数据:
val originalFuts : Seq[Future[Int]] =
Seq(
Future.successful(1),
Future.successful(2),
Future.successful(3)
)
val fut : Future[Seq[Future[Int]]] = Future.successful(originalFuts)
您可以通过以下方式访问基础的Integer
值:
for {
seq <- fut
f <- seq
i <- f
} {
println(i)
}
简化
您可以通过少量修改使数据结构更简单
val futSeq =
projectDao
.getProjectIdsByUserId(userId)
.flatMap(ids => Future sequence (ids map (toProject(_, userId)))
然后可以用更简单的方式处理
for {
seq <- futSeq
i <- seq
} {
println(i)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.