2016-04-29 2 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

попробовать flatMapping на 'Future' –

ответ

2

Вам нужно «подождать» для будущего или нет. Вы можете использовать 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 
} 
0

Используйте для понимания, которое desugars к flatMap,

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" 
} 
Смежные вопросы