2016-04-29 16 views
3

私はFuture[List[Employee]]を返すメソッドを持っています。私はさまざまな目的のためにリストのサイズをチェックしたい。私はリストにsizeを呼び出すことができないと私はその考えているFuture。なにか提案を?Scalaの将来のリストのサイズチェック

val employees: Future[List[Employee]] = companyService.findEmployeesWorkingOn(someDate) 
employees match { 
    case emp if(emp.size == 1) => Logger.info("Only one employee working") 
    case emp if(emp.size == 0) => Logger.info("No one working") 
    case _ => Logger.info("Multiple employees working") 
} 
+1

は 'Future'にflatMappingしてみてください –

答えて

2

未来が起こるのを待つ必要があります。 mapを使用してFuture[List[Employee]]Future[Int]にマップし、onSuccessコールバックを使用できます。ここでflatMapにdesugars理解のための

val sizeFuture = employees.map(_.size) // returns a Future[Int] 
sizeFuture onSuccess { 
    case size:Int => println(size) // do your stuff here 
} 
0

使用A、

for (e <- employees) yield e.size match {...} 

リストeは将来が成功した場合にのみ一致しています。

0

ご利用の場合のサイズを確認する必要はありません:

val employees: Future[List[Employee]] = … 
val result = employees map { 
    case Nil => "no employees" 
    case List(e) => "one employee" 
    case es => "multiple employees" 
}