清除Scala语法"将可选值附加到Seq(如果存在)"

Nat*_*han 7 functional-programming scala

我经常看到这两种模式用于向Seq附加一个Optional值:

def example1(fooList: Seq[Foo], maybeFoo: Option[Foo]): Seq[Foo]) = {
  if (maybeFoo.isDefined)
    fooList :+ maybeFoo.get
  else
    fooList
}

def example2(fooList: Seq[Foo], maybeFoo: Option[Foo]): Seq[Foo]) = {
  maybeFoo match {
    case Some(foo) => fooList :+ foo
    case None => fooList
  }
}
Run Code Online (Sandbox Code Playgroud)

这两种方法都有效,但它们看似冗长和丑陋.是否有现有的操作员或方法可以更自然地/功能性地完成此操作?

谢谢!

Ang*_*ese 19

Option隐式转换为包含1或0项的序列,因此以下工作:

scala> val opt = Some("a")
opt: Some[String] = Some(a)

scala> val nope = None
nope: None.type = None

scala> val seq = Seq("a", "b", "c")
seq: Seq[String] = List(a, b, c)

scala> seq ++ opt
res3: Seq[String] = List(a, b, c, a)

scala> seq ++ nope
res4: Seq[String] = List(a, b, c)
Run Code Online (Sandbox Code Playgroud)


jwv*_*wvh 5

maybeFoo.foldLeft(fooList)(_ :+ _)
Run Code Online (Sandbox Code Playgroud)