首页 > 解决方案 > 根据 A 成员将 List[A] 转换为 List[Option[A]]

问题描述

我已经定义:

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)startendNonestartendNone

例如。

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

通过这样做,它将允许flatMap对最后一个列表进行简单的处理并省略Nones

标签: scalafunctional-programmingscala-collections

解决方案


您不需要单独的flatMap步骤,只需collect您立即需要的:

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

推荐阅读