我有一个对象列表,例如
tie
我需要创建一个新的List [String],其中包含来自myList的nonEmpty paramA值。例如,
case class MyClass(paramA: Option[String], paramB: String)
val myList = List[MyClass]
最优雅的方法是什么?
答案 0 :(得分:4)
给定的myList
元素不符合MyClass
类型,因为paramA
应该是Option[String]
。因此,将Some(...)
添加到最后两个元素的第一个参数中,如下所示:
scala> val myList = List(MyClass(None,"abc"),
| MyClass(Some("AAA"),"xyz"),
| MyClass(Some("BBB"),"xyz"))
然后,我们可以flatMap
使用paramA
,而Some
会返回选项中的值scala> myList.flatMap(_.paramA)
res3: List[String] = List(AAA, BBB)
<p id="UserInfo">What is your name?</p>
答案 1 :(得分:1)
以下是@Brian's flatMap
solution的替代方案,它使用了collect
:
myList.collect{ case MyClass(Some(paramA), _) => paramA }
collect
过滤了定义case
的元素,对于这些元素,它会应用map
转换。