【问题标题】:How to unwrap optional tuple of options to tuple of options in Scala?如何将可选的选项元组解包到 Scala 中的选项元组?
【发布时间】:2017-06-17 23:37:32
【问题描述】:

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

【问题讨论】:

  • 如果 tuple 的选项是 none 应该怎么办?你想要一个默认值吗?

标签: scala scala-collections


【解决方案1】:

我想:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多