我有这个结构:
projectDao.getProjectIdsByUserId(userId).map(ids => ids.map(id => toProject(id, userId)))
.map(Future.sequence(_)) /* transform Future[Seq[Future[...]]] to Future[Future[Seq[...]]] */
如何在控制台中打印此结果?
项目数据中的应该是我想在控制台中打印的城市
是可能的,怎么样?
由于
答案 0 :(得分:1)
我认为最直接的方法是通过foreach
函数,例如:
val future = Future(...)
future.foreach(println)
请注意我单独调用foreach
,在调用链中使用它会导致不同的结果类型。
在您的情况下,如果您的类型为Future[Future[...]]
,则需要致电flatten
以获得展位Future[...]
,但我想您可以仔细检查您的链条,也许可以更换您与map
的{{1}}来电之一,以简化它。我想这会是这样的:
flatMap
然后把它放在某处并记录:
projectDao
.getProjectIdsByUserId(userId)
.map(ids => ids.map(id => toProject(id, userId)))
.flatMap(Future.sequence(_))
或者您可以使用val results = projectDao.getPro...
results.foreach(println)
:
Future.traverse
答案 1 :(得分:1)
创建与原始问题相符的数据:
val originalFuts : Seq[Future[Int]] =
Seq(
Future.successful(1),
Future.successful(2),
Future.successful(3)
)
val fut : Future[Seq[Future[Int]]] = Future.successful(originalFuts)
您可以使用for comprehension访问基础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)
}