我有一个 Option[Set[String]]
类型的 Scala 值,我试图在集合 filter
方法中使用它:
val opt: Option[Set[String]] = ...
collection.filter {
value =>
opt match {
case Some(set) => set.contains(value)
case None => true
}
}
如果
opt
值是 Some(...)
我想使用封闭的 Set
来过滤集合,否则我想包括集合中的所有项目。有没有更好(更惯用)的方式来使用
Option
( map
、 filter
、 getOrElse
等)?opt
来自一个可选的命令行参数,其中包含要包含的术语列表。如果缺少命令行参数,则包括所有术语。
最佳答案
我会使用 Set[A]
扩展 A => Boolean
并将返回 true
的常量函数传递给 getOrElse
的事实:
val p: String => Boolean = opt.getOrElse(_ => true)
或者:
val p = opt.getOrElse(Function.const(true) _)
现在你可以只写
collection.filter(p)
。如果您想要单线,以下任一方法也适用:collection filter opt.getOrElse(_ => true)
collection filter opt.getOrElse(Function.const(true) _)
关于scala - 过滤 Scala 选项[设置],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652683/