나는이있는 경우 List[Option[A]]
스칼라에서 필터링 할 수있는 관용적 인 방법은 무엇입니까 None
값은?
한 가지 방법은 다음을 사용하는 것입니다.
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
더 “특이한”방법이 있습니까? 이것은 매우 간단 해 보입니다.
답변
동시에 옵션을 제거하려면 flatten
다음을 사용할 수 있습니다 .
scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
답변
someList.filter(_.isDefined)
결과 유형을 다음과 같이 유지하려면 List[Option[A]]
답변
cats
또한 갖는다 라이브러리 flattenOption
온 모든 F[Option[A]]
으로 F[A]
(여기서 F[_]
A는 FunctorFilter
)
import cats.implicits._
List(Some(1), Some(2), None).flattenOption == List(1, 2)