如何将Future [Seq [A]]转换为包含Seq [A]的Future?

时间:2015-12-29 18:45:59

标签: scala finagle finatra

我正在使用Finatra应用程序,我有一个Future[Seq[A]](来自Finagle电话)。但是,我需要将其转换为包含Seq[A]的新对象,例如

case class Container[A](s: Seq[A])

这将导致Future[Container]

虽然我可以在Future[Seq[A]]上执行地图,但目前还不清楚如何到达Future[Container[Seq[A]]

1 个答案:

答案 0 :(得分:5)

.map Future上的Container.apply <{1}}:

scala> case class Container[A](s: Seq[A])
defined class Container

scala> val f = Future.successful(List(1, 2, 3))
f: scala.concurrent.Future[List[Int]] = scala.concurrent.impl.Promise$KeptPromise@3f363cf5

scala> f.map(Container.apply)
res2: scala.concurrent.Future[Container[Int]] = scala.concurrent.impl.Promise$DefaultPromise@3d829787

scala> res2.value
res3: Option[scala.util.Try[Container[Int]]] = Some(Success(Container(List(1, 2, 3))))

f.map(Container.apply)f.map(Container.apply(_))的缩写,而f.map(v => Container.apply(v))则是f.map(Container(_))的缩写。

请注意,您也可以根据自己的喜好编写 $q = $this->getEntityManager() ->getRepository('MyBundle:Entity') ->createQueryBuilder(‌​'c') ->select(‌​'c') ->leftjoin(‌​'c.children', 'cc') ->addselect(‌​'cc') ->where(‌​'c.parent is NULL') .... return $q;