如何将可选的选项元组解包为 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)
}
我有一个 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)
}