根据A成员将List [A]转换为List [Option [A]]

时间:2019-02-27 17:30:48

标签: scala functional-programming scala-collections

我已经定义:

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 startend中的任何一个是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

1 个答案:

答案 0 :(得分:6)

您不需要单独的flatMap步骤,只需collect仅需您所需要的时间即可:

eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }