2017-06-17 39 views
1

我有Person列表,并希望通过其id如何展开可选的元组元素到Scala中的选项元组?

val person = personL.find(_.id.equals(tempId)) 

之后取回一个人,我想作为一个元组列表,这是Person属性的第一个和最后一个元素。

val marks: Option[(Option[String], Option[String])] = person.map { p => 
       val marks = p.school.marks 
       (marks.headOption.map(_.midtermMark), marks.lastOption.map(_.finalMark)) 
} 

这项工作的很好,但现在我想的Option[(Option[String], Option[String])]转化为一个简单的(Option[String], Option[String])。通过使用先前的地图可以在某种程度上实现这一点吗?

+0

什么都要万一元组的选项是否会发生?你想要一个默认值吗? –

回答

1

我想:

person.map{...}.getOrElse((None, None)) 

(None, None)这里是一个默认值的情况下,如果你的元组的选项为空

0

你,或许,寻找fold

personL 
.collectFirst { 
    case Person(`tempId`, _, .., school) => school.marks 
}.fold[Option[String], Option[String]](None -> None) { marks => 
    marks.headOption.map(_.midtermMark) -> marks.lastOption.map(_.finalMark) 
}