我有以下代码:
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[Option[FullUser]]
时,这将返回Seq[FullUser]
- 即如果对u.username.get
的调用返回None,则忽略它。我该怎么做?
答案 0 :(得分:5)
考虑平面图。
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
如何协同工作的一些说明,请参阅示例this blog post。
答案 1 :(得分:4)
试着理解
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)
与flatMap
或map
混合的无法读取。