Получить все записи, имеющие значение из списка [Вариант] в Scala - программирование
Подтвердить что ты не робот

Получить все записи, имеющие значение из списка [Вариант] в Scala

Можно ли получить все записи a List[Option[T]] со значением?

Пример:

val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)

результат:

 List[Int] = List(1, 2)

Есть ли способ сделать это за один шаг? Это обычный случай, не так ли?

4b9b3361

Ответ 1

Обратите внимание, что

 list.flatten

Будет делать то же самое.

Ответ 2

Да, вы можете использовать collect для этого:

list.collect { case Some(x) => x }

collect принимает значение PartialFunction[A,B] и применяет эту функцию ко всем элементам, на которых он определен, и отбрасывает остальные.

изменить:

Как правильно сказано в gpampara, для этого случая flatten будет достаточно. collect был бы правильным инструментом, если бы были дополнительные ограничения и/или преобразование.

Ответ 3

Вы также можете использовать:

list.flatMap( x => x)

scala> val a = List(None, Some(1), None, Some(2))
a: List[Option[Int]] = List(None, Some(1), None, Some(2))

scala> a.flatMap(x => x)
res0: List[Int] = List(1, 2)

Для объяснения того, как это работает, вы можете проверить эту статью: http://www.brunton-spall.co.uk/post/2011/12/02/map-map-and-flatmap-in-scala/