2012-04-11 10 views
75

Scala'da bir List[Option[A]] varsa, None değerlerini filtrelemenin deyimsel yolu nedir?Hiçbiri Listenin dışında filtrelemek [Seçenek]?

val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye")) 
someList.filter(_ != None) 

daha "deyimsel" yolu var mı:

bir yolu takip kullanmaktır? Bu oldukça basit görünüyor. Aynı anda seçeneklerin kurtulmak istiyorsanız

+1

İlgili olarak sonuç türünü tutmak istiyorsanız: https: // stackoverflow.com/questions/4730842/how-to-transform-scala-collection-of-optionx-to-collection-of-x – dskrvk

cevap

120

kullanabileceğiniz flatten:

scala> someList.flatten 
res0: List[String] = List(Hello, Goodbye) 
+18

Bu 'flatMap'in' Hiçbiri 'dışındaki liste elemanlarını işlemek için kullanılabilir. "someList.flatten.map" 'e benzer şekilde, çoğu zaman bu öğelerle çalışmak ve sadece listeyi eğlenceli hale getirmek değil. – Frank

+0

Evet, Raph'a filtrelenmiş listeyle ne yapmayı beklediğini sormaya tereddüt ettim. Ancak, sadece düzleştirmek istediğiniz birçok senaryo var. – Nicolas

+0

Bazen 'Option' nesnesinin içeriğini almak istiyorum, ancak diğer zamanlarda 'Seçenek [A]' olarak kalmaları için onlara ihtiyacım var. Seçenek [A] '- cool özelliği için daha fazla kullanım buluyorum. – Ralph

10

someList.filter(_.isDefined) Eğer List[Option[A]]