根据A成员将列表[A]转换为列表[选项[A]]

Bar*_*ach 2 functional-programming scala scala-collections

我已经定义:

final case class EventOpt(start: Option[Long], end: Option[Long])
final case class Event(start: Long, end: Long)
Run Code Online (Sandbox Code Playgroud)

对我来说唯一有趣的对象是那些设置了两个字段的对象,我想过滤其余部分

List[EventOpt],我想将它转化成List[Option[Event]]使用Some(Event)时都startend设置和None时任startend他们是None

例如.

List(EventOpt(Some(1), None), EventOpt(None, Some(2)), EventOpt(Some(3), Some(4))) 
=>
List(None, None, Some(Event(4, 3)))
Run Code Online (Sandbox Code Playgroud)

通过这样做,它将允许flatMap在最后一个列表上做一个简单的操作并省略Nones

And*_*kin 6

您不需要单独的flatMap步骤,collect只需要立即处理您需要的步骤:

eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }
Run Code Online (Sandbox Code Playgroud)