Hiçbiri Liste Dışı Nasıl Filtrelenir [Seçenek]?


105

Bir List[Option[A]]Scala'ya sahipsem, Nonedeğerleri filtrelemenin deyimsel yolu nedir?

Bunun bir yolu, aşağıdakileri kullanmaktır:

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

Daha "deyimsel" bir yol var mı? Bu oldukça basit görünüyor.


Yanıtlar:


161

Seçeneklerden aynı anda kurtulmak istiyorsanız, şunları kullanabilirsiniz flatten:

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

23
Bunu eklersiniz flatMapdışındaki liste elemanlarını işlemek için kullanılabilir Nonebenzer s, someList.flatten.mapbiri genellikle sadece bu elemanların çalışmak istediği değil gibi flatteneğlenceli dışarı listesi.
— Frank

Evet, Raph'a filtrelenmiş listeyle ne yapmayı umduğunu sormakta tereddüt ettim. Ama düzleştirmek istediğiniz birçok senaryo da var.
— Nicolas

Bazen Optionnesnelerin içeriğini geri almak isterim , ancak diğer zamanlarda da öyle kalmaları gerekir Option[A]. Option[A]- Harika özellik için gittikçe daha fazla kullanım buluyorum .
— Ralph

Eşdeğer bir flatForeach tipi yöntem var mı?
— cdmckay

1
Koleksiyonunuz değişmez ise, faltmap işinizi görecektir. Koleksiyonunuz değiştirilebilirse, hayır, yoktur.
— Nicolas

18

someList.filter(_.isDefined) sonuç türünü şu şekilde tutmak istiyorsanız List[Option[A]]


2

catsAyrıca var kütüphane flattenOptiondöner bir F[Option[A]]bir halinde F[A](burada F[_]a, FunctorFilter)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.