如何将可选的选项元组解包为 Scala 中的选项元组?

How to unwrap optional tuple of options to tuple of options in Scala?

我有一个 Person 的列表,想通过 id

检索一个人
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])。是否可以通过使用之前的地图即时执行此操作?

我想:

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

(None, None) 是这里的默认值,以防您的元组选项为空

您可能正在寻找 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) 
 }