在scala中使用collect时记录跳过的条目

时间:2016-01-15 16:01:47

标签: scala

跟进此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和姓名?有什么建议吗?

2 个答案:

答案 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
}