Jeśli mam List[Option[A]]
w Scali, jaki jest idiomatyczny sposób na odfiltrowanie None
wartości?
Jednym ze sposobów jest użycie:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
Czy jest bardziej „idiomatyczny” sposób? Wydaje się to całkiem proste.
Odpowiedzi:
Jeśli chcesz pozbyć się opcji w tym samym czasie, możesz użyć
flatten
:źródło
flatMap
można to wykorzystać do przetworzenia elementów listy innych niżNone
s, podobnie jaksomeList.flatten.map
, ponieważ często chce się pracować z tymi elementami, a nie tylkoflatten
z listą dla zabawy.Option
obiektów, ale innym razem potrzebuję, aby pozostałyOption[A]
. Znajduję coraz więcej zastosowańOption[A]
- fajna funkcja.someList.filter(_.isDefined)
jeśli chcesz zachować typ wyniku jakoList[Option[A]]
źródło
cats
Biblioteka posiada równieżflattenOption
, co zamienia każdyF[Option[A]]
w produktF[A]
(jeśliF[_]
jestFunctorFilter
)źródło