Scala:过滤掉特定属性为无的元组

Scala:过滤掉特定属性为无的元组,scala,filter,Scala,Filter,我有一个总结案例课: case class Summary( title: String, desc: String, image: Option[String], path: String, timestamp: Int ) 我尝试检索每个ID的摘要: val rawSummaryList = nids.map { _ match { case Some(id) => (id, Node.nodeSumByNid(id)) case Non

我有一个总结案例课:

case class Summary(
  title: String,
  desc: String,
  image: Option[String],
  path: String,
  timestamp: Int
)
我尝试检索每个ID的摘要:

val rawSummaryList = nids.map {
   _ match {
     case Some(id) => (id, Node.nodeSumByNid(id))
     case None => (-1, None)
   }
}
这将返回一个List[Int,Option[drupalick.data.Summary]]类型的值,每个摘要可能包含,也可能不包含图像

我如何:

删除Int,选项[Summary]对,其中Summary或Summary.image为None? 将Int,选项[Summary]转换为Int,Summary? 您可以使用collect函数,它是map和filter的组合,例如:


您可以使用以下内容进行理解:

  val rawSummaryList: List[(Int, Summary)] = for {
    Some(id) <- nids
    summary <- Node.nodeSumByNid(id)
    image <- summary.image
  } yield (id,summary)

谢谢对我来说,这个似乎更清晰一些。
  val rawSummaryList: List[(Int, Option[Summary])] = ???

  val filtered: List[(Int, Summary)] = rawSummaryList collect {
    case (id, Some(summary)) if summary.image.isDefined => (id, summary) 
  }
  val rawSummaryList: List[(Int, Summary)] = for {
    Some(id) <- nids
    summary <- Node.nodeSumByNid(id)
    image <- summary.image
  } yield (id,summary)