我已经定义:
final case class EventOpt(start: Option[Long], end: Option[Long])
final case class Event(start: Long, end: Long)
对我来说,唯一有趣的对象是同时设置了两个字段的对象,我想过滤其余的对象
具有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)))
这样做,将允许对最后一个列表执行简单的flatMap
并省略None
s
答案 0 :(得分:6)
您不需要单独的flatMap
步骤,只需collect
仅需您所需要的时间即可:
eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }