Wenn ich eine List[Option[A]]
in Scala habe, wie kann ich die None
Werte idiomatisch herausfiltern ?
Eine Möglichkeit besteht darin, Folgendes zu verwenden:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
Gibt es einen "idiomatischeren" Weg? Das scheint ziemlich einfach zu sein.
Antworten:
Wenn Sie die Optionen gleichzeitig entfernen möchten, können Sie Folgendes verwenden
flatten
:quelle
flatMap
verwendet werden kann, um die Listenelemente außerNone
s zu verarbeiten, ähnlich wiesomeList.flatten.map
, da man oft mit diesen Elementen arbeiten möchte und nicht nurflatten
die Liste aus Spaß.Option
Objekte abrufen , aber manchmal muss er so bleibenOption[A]
. Ich finde immer mehr Anwendungen fürOption[A]
- coole Funktion.someList.filter(_.isDefined)
Wenn Sie den Ergebnistyp als beibehalten möchtenList[Option[A]]
quelle
Die
cats
Bibliothek hat auchflattenOption
, was jedeF[Option[A]]
in eineF[A]
(woF[_]
ist eineFunctorFilter
) verwandeltquelle