Jika saya memiliki List[Option[A]]
di Scala, apa cara idiomatik untuk menyaring None
nilai?
Salah satu caranya adalah dengan menggunakan yang berikut ini:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
Apakah ada cara yang lebih "idiomatis"? Ini sepertinya sangat sederhana.
Jawaban:
Jika Anda ingin menghilangkan opsi pada saat yang sama, Anda dapat menggunakan
flatten
:sumber
flatMap
dapat digunakan untuk memproses elemen daftar selainNone
s, mirip dengansomeList.flatten.map
, karena orang sering ingin bekerja dengan elemen ini dan bukan hanyaflatten
daftar yang tidak menyenangkan.Option
objek, tetapi di lain waktu saya membutuhkannya untuk tetap sebagaiOption[A]
. Saya menemukan semakin banyak kegunaan untukOption[A]
- fitur keren.someList.filter(_.isDefined)
jika Anda ingin mempertahankan tipe hasil sebagaiList[Option[A]]
sumber
The
cats
perpustakaan juga memilikiflattenOption
, yang ternyata salahF[Option[A]]
menjadiF[A]
(di manaF[_]
adalahFunctorFilter
)sumber