[scala] 목록에서 없음을 필터링하는 방법 [옵션]?

나는이있는 경우 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)


답변