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)