scala - 过滤 Scala 选项[设置]

标签 scala filtering option

我有一个 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 ( mapfiltergetOrElse 等)?
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/

相关文章:

scala - Play Famework 2.1 Websockets 是否有 Comet 适配器?

scala - Intellij的SBT控制台异常: not found: value ideaPort ideaPort in Global := 49516

c# - 排除包含另一个列表中的值的列表项

php - 选项国家html与mysql

Scala Option 的 collect 方法不喜欢我的 PartialFunction

scala - 如何将一个 lambda 表达式对象分配给另一个对象?

c# - 如何在 C# 中通过表达式树构建集合过滤器

java - Java中半结构化数据的贝叶斯分类

css - 单击链接时更改选项表单元素的值

xml - 斯卡拉 XML : Descendant vs Child