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)时都start和end设置和None时任start和end他们是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
您不需要单独的flatMap步骤,collect只需要立即处理您需要的步骤:
eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }
Run Code Online (Sandbox Code Playgroud)