Future[Seq[String]] が空で、使用しているかどうかを確認したい
if(!Future.sequence(sortSeq).isEmpty){
//doSomething
}
しかし、それは私にエラーをスローしますか?
の型はsortSeq
isだと思い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]] = scala.concurrent.impl.Promise$DefaultPromise@3592f7c6
scala> Await.result(sortSeq.map{_.isEmpty}, 11.seconds)
res1: Boolean = false
Future.sequence
メソッドを使用して、 を に変換TraversableOnce[Future[A]]
しFuture[TraversableOnce[A]]
ます。
Seq
が空かどうかを忘れて、 の機能をSeq
使用して操作できると思いますmap
Future
val s = Future[Seq[String]](Seq("s", "e", "q"))
val p = s.map(s => s.foreach(println))
これが機能するのは、空のチェックがバックグラウンドで暗黙的に実行されるためです。以下の例では、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
}
}
お役に立てれば。