如何过滤列表[选项]中的无?

问题描述 投票:95回答:3

如果我在Scala中有List[Option[A]],过滤掉None值的惯用方法是什么?

一种方法是使用以下内容:

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

有更“惯用”的方式吗?这看起来很简单。

scala option
3个回答
153
投票

如果你想同时摆脱选项,你可以使用flatten

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

16
投票

someList.filter(_.isDefined)如果你想保持结果类型为List[Option[A]]


2
投票

cats库也有flattenOption,它将任何F[Option[A]]变成F[A](其中F[_]FunctorFilter

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
© www.soinside.com 2019 - 2024. All rights reserved.