Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在映射集合时忽略无值_Scala - Fatal编程技术网

Scala 如何在映射集合时忽略无值

Scala 如何在映射集合时忽略无值,scala,Scala,我有以下代码: for { totalUsers = currentUsers.map { u => newUsersMap.get(u.username.get).map { t => FullUser(t.username, u.firstName, u.lastName, u.batch, t.description) } } } yield { totalUsers } 当我想要的是一个Seq[FullUser]时,这将返回一个Seq

我有以下代码:

for {
  totalUsers = currentUsers.map { u =>
    newUsersMap.get(u.username.get).map { t =>
      FullUser(t.username, u.firstName, u.lastName, u.batch, t.description)
    }
  }
} yield {
  totalUsers
}
当我想要的是一个
Seq[FullUser]
时,这将返回一个
Seq[Option[FullUser]]
——也就是说,如果调用
u.username.get
没有返回任何值,那么就忽略它。如何实现这一点?

考虑flatmapping

val totalUsers = currentUsers.flatMap { u =>
  newUsersMap.get(u.username.get).map { t =>
    FullUser(t.username, u.firstName, u.lastName, u.batch, t.description)
  }
}

有关
Seq
Option
flatMap
如何协同工作的一些解释,请参见示例。

请尝试理解

for {
  user <- currentUsers
  username <- user.username.toList      //you need to convert to seq type to prevent ambiguous option seq mix problems.
  t <- newUserMap.get(username).toList
} yield FullUser(t.username, u.firstName, u.lastName, u.batch, t.description)
用于{

用户如果
u.username
是一个
选项
可能是
None
,我建议
u.username.flatmap(newUsersMap.get).map{t=>…
@Kigyo这有什么不同?@cm22如果
u.username
是一个
选项
,并且没有任何价值(aka
non/code>),调用
u.username.get
将抛出一个异常。我的建议也考虑了这种情况。顺便说一下,通过映射混合理解和复杂转换有点反模式。