Scala:将Future[Option[List[User]]]转换为Future[Map[Long,User]]

Scala:将Future[Option[List[User]]]转换为Future[Map[Long,User]],scala,future,Scala,Future,User是一个案例类: case class User(id: Long, firstName: String, lastName: String) 搜索函数返回Future[Option[List[User]]]。从这个未来,我想提取一个id为键的Map[Long,User]。现在我正在使用下面的方法来提取地图,但是应该有更好的方法 def users: Future[Map[Long, User]] = { for { future <- search(...) }

User
是一个案例类:

case class User(id: Long, firstName: String, lastName: String)
搜索函数返回
Future[Option[List[User]]]
。从这个未来,我想提取一个id为键的
Map[Long,User]
。现在我正在使用下面的方法来提取地图,但是应该有更好的方法

def users: Future[Map[Long, User]] = { 
  for {
    future <- search(...)
  } yield for {
    users <- future
  } yield for {
    user <- users
  } yield user.id -> user
}.map(_.map(_.toMap))
def用户:未来[Map[Long,User]]={
为了{

未来我认为这应该满足您的需要:

def users: Future[Map[Long, User]] = {
  search().map { searchResult =>
    searchResult match {
      case Some(list) => list.map { u => (u.id, u) }.toMap
      case _ => Map.empty
    }
  }
}
这个怎么样

def users: Future[Map[Long, User]] = search().map { opt =>
  val list = for {
    users <- opt.toList
    user <- users
  } yield (user.id, user)
  list.toMap
}
def users:Future[Map[Long,User]]=search().Map{opt=>
val list=for{
使用者