我想检查是否有未来[序列[字符串]是空的,我使用斯卡拉检查,如果未来[序列[字符串]的isEmpty
if(!Future.sequence(sortSeq).isEmpty){
//doSomething
}
但将我错误?
我想检查是否有未来[序列[字符串]是空的,我使用斯卡拉检查,如果未来[序列[字符串]的isEmpty
if(!Future.sequence(sortSeq).isEmpty){
//doSomething
}
但将我错误?
我想sortSeq
的类型是Future[Seq[String]]
,所以你不需要Future.sequence
。
你必须等待你Future
的结果,然后检查,如果结果为空:
import scala.concurrent.duration._
if(!Await.result(sortSeq.map{_.isEmpty}, 5.seconds){
//doSomething
}
如果你可以在不同的线程执行doSomething
你可以试试这个:
val someRusultFuture = sortSeq.map{ rs =>
if(!rs.isEmpty){
//doSomething
}
}
但您必须等待someRusultFuture
的结果。
证明它的工作原理:
scala> import concurrent.{Future, Await}
import concurrent.{Future, Await}
scala> import scala.concurrent.duration._
import scala.concurrent.duration._
scala> val sortSeq = Future{ Thread.sleep(10000); Seq("a") }
sortSeq: scala.concurrent.Future[Seq[String]] = [email protected]
scala> Await.result(sortSeq.map{_.isEmpty}, 11.seconds)
res1: Boolean = false
它会引发一个错误: – 2013-04-04 05:55:22
请注意,隐式转换不适用,因为它们不明确: [error] both method any2在类型为[A](x:A)的对象Predef中确保确保[A] [error] and method any2ArrowAssoc在类型为[A](x:A)的对象Predef中,ArrowAssoc [A] [错误]可能是scala.concurrent.Future [Seq [String]]中的转换函数到?M [错误]发现一个错误 – 2013-04-04 05:56:00
@princessofpersia :sortSeq的类型是什么? – senia 2013-04-04 05:57:59
Future.sequence
方法用于一个TraversableOnce[Future[A]]
转变为Future[TraversableOnce[A]]
。
我想你可以忘记Seq
是否为空或不使用的Future
val s = Future[Seq[String]](Seq("s", "e", "q"))
val p = s.map(s => s.foreach(println))
的map
功能这样做是因为,在后台隐式执行空管检查与Seq
只是工作。在下面的例子中,当Seq
为空时,不会打印任何内容。
scala> val s = Future[Seq[String]](Seq.empty)
s: scala.concurrent.Future[Seq[String]] = Future(<not completed>)
scala> val p = s.map(s => s.foreach(println))
p: scala.concurrent.Future[Unit] = Future(<not completed>)
如果你真的想执行空的检查,可以也使用withFilter
。
对于非空Seq
scala> val s = Future[Seq[String]](Seq("s", "e", "q"))
s: scala.concurrent.Future[Seq[String]] = Future(Success(List(s, e, q)))
scala> val p = s.withFilter(_.nonEmpty).map(s => s.foreach(println))
p: scala.concurrent.Future[Unit] = Future(<not completed>)
s
e
q
随着空Seq
scala> val s = Future[Seq[String]](Seq.empty)
s: scala.concurrent.Future[Seq[String]] = Future(Success(List()))
scala> val p = s.withFilter(_.nonEmpty).map(s => s.foreach(println))
p: scala.concurrent.Future[Unit] = Future(<not completed>)
你也可以做的空白支票作为上述答复中提到
val someRusultFuture = sortSeq.map{ rs =>
if(!rs.isEmpty){
//doSomething
}
}
希望这有助于。
'sortSeq'的类型是什么?它是Seq [未来[字符串]]? – senia 2013-04-04 05:37:25