Преобразовать список [A] в список [Option [A]] в зависимости от членов A - PullRequest
0 голосов
/ 27 февраля 2019

Я определил:

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

1 Ответ

0 голосов
/ 27 февраля 2019

Вам не нужен отдельный flatMap шаг, просто collect только то, что вам нужно сразу:

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