如何从Scala中的Option [Seq [A]]转换为List [A]

时间:2018-02-22 18:40:27

标签: scala

我有这堂课:

case class MyClass(field1: Option[Seq[String]],
                   field2: Option[Seq[String]],
                   field3: Option[Seq[String]])

我需要将这些字段翻译/解析为另一种List[String]类型的结构。

已经尝试使用map.(x => x.toString())flatten,但到目前为止尚未尝试过甜甜圈。

此片段:

Option[Seq[String]].toList.flatten.distinct给了我List[Any]

2 个答案:

答案 0 :(得分:4)

嗯,我认为你可以使用getOrElse(如果你对Seq不满意,可以使用toList):

// Seq[String]
field.getOrElse(List.empty)

// List[String]
field.getOrElse(List.empty).toList

我假设如果字段为None,您可以使用空列表。希望有所帮助!

答案 1 :(得分:0)

您可能会在不同的地方找到类似的陈述,例如来自Idiomatic Scala: Your Options Do Not Match

  

使用scala.Option实例的最惯用的方法是将其视为集合或monad并使用map,flatMap,filter或foreach [...]使用scala的一种不那么惯用的方法.Option值是通过模式匹配

该页面提供了一个fold示例,可以像这样使用List [String]:

field.fold(List[String]())(_.toList)

正如@Evgeny所建议的那样,这也会导致List [String]:

field.toList.flatten.distinct