根据 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]
我想在 start
和 end
都已设置且 [=17= 时使用 Some(Event)
将其转换为 List[Option[Event]]
] 当 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
您不需要单独的 flatMap
步骤,只需 collect
您需要的内容即可:
eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }
我定义了:
final case class EventOpt(start: Option[Long], end: Option[Long])
final case class Event(start: Long, end: Long)
我唯一感兴趣的对象是那些同时设置了两个字段的对象,我想过滤其余的
具有 List[EventOpt]
我想在 start
和 end
都已设置且 [=17= 时使用 Some(Event)
将其转换为 List[Option[Event]]
] 当 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
您不需要单独的 flatMap
步骤,只需 collect
您需要的内容即可:
eventOpts.collect { case EventOpt(Some(x), Some(y)) => Event(x, y) }