在 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" 来决定未来是否会发生。您可以使用 map
将 Future[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"
}
我有一个方法 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" 来决定未来是否会发生。您可以使用 map
将 Future[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"
}