我有这堂课:
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]
。
答案 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