跟进此post。我的实施如下
myres.map (
_.iterator
.map { r => r.id -> r.name }
.collect {
case(Some(id), Some(name)) if id != "" && name != "" => id.toLong -> name
case _ => Logger.warn(s"Skipping info with id $id and name $name")
}
.toMap
)
我正在尝试记录与条件不匹配的条目的信息。如何在第二个case_
上访问ID和姓名?有什么建议吗?
答案 0 :(得分:1)
您需要像第一种情况一样绑定模式中的变量:
case (Some(id), Some(name)) if id != "" && name != "" =>
id.toLong -> name
case (Some(id), Some(name)) =>
Logger.warn(s"Skipping info with id $id and name $name")
答案 1 :(得分:1)
您无法使用.collect
(接受的答案无法编译)。
.flatMap
正是您所寻找的:
.flatMap {
case (Some(id), Some(name)) => Some(id -> name)
case (x,y) => Logger.warn(s"Something is missing: $id -> $name); None
}