我正在使用Finatra应用程序,我有一个Future[Seq[A]]
(来自Finagle电话)。但是,我需要将其转换为包含Seq[A]
的新对象,例如
case class Container[A](s: Seq[A])
这将导致Future[Container]
。
虽然我可以在Future[Seq[A]]
上执行地图,但目前还不清楚如何到达Future[Container[Seq[A]]
。
答案 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;
。