从对象列表中收集nonEmpty对象字段的最优雅方式

时间:2018-04-23 17:03:54

标签: scala functional-programming

我有一个对象列表,例如

tie

我需要创建一个新的List [String],其中包含来自myList的nonEmpty paramA值。例如,

case class MyClass(paramA: Option[String], paramB: String)

val myList = List[MyClass]

最优雅的方法是什么?

2 个答案:

答案 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转换。