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

Convert List[A] to List[Option[A]] depending on A members

我定义了:

final case class EventOpt(start: Option[Long], end: Option[Long])
final case class Event(start: Long, end: Long)

我唯一感兴趣的对象是那些同时设置了两个字段的对象,我想过滤其余的

具有 List[EventOpt] 我想在 startend 都已设置且 [=17= 时使用 Some(Event) 将其转换为 List[Option[Event]] ] 当 startend 中的任何一个是 None?

例如

List(EventOpt(Some(1), None), EventOpt(None, Some(2)), EventOpt(Some(3), Some(4))) 
=>
List(None, None, Some(Event(4, 3)))

通过这样做,可以对最后一个列表做一个简单的 flatMap 并省略 Nones

您不需要单独的 flatMap 步骤,只需 collect 您需要的内容即可:

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