在 Scala 中检查未来列表的大小

Size check on future list in Scala

我有一个方法 return Future[List[Employee]]。我想出于各种目的检查列表大小。我无法在列表中调用 size,我认为这是因为它在 Future 中。有什么建议吗?

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")
}

你需要 "wait" 来决定未来是否会发生。您可以使用 mapFuture[List[Employee]] 映射到 Future[Int] 并使用 onSuccess 回调。

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

使用 for comprehension which desugars to a flatMap,

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

这里列表e只有future成功才匹配

无需检查您的用例的大小:

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