Scala:仅将某些附加到不可变列表



所以假设我们得到了一个List[String]和一堆Option[String]'s称它们为a, b, c。假设我想将a, b, c外的有效(某些(Options[String]'s附加到我现有的List[String]. 使用不可变结构解决此问题的最佳方法是什么?

也就是说,我知道我可以使用ListBuffer并执行以下操作:

def foo(a: Option[String], b: Option[String], c: Option[String]) : ListBuffer[String] = {
    val existingList = new ListBuffer("hey")
    a.map(_ => existingList += _)
    b.map(_ => existingList += _)
    c.map(_ => existingList += _)
}

但我想使用不可变的结构。

在选项列表中使用 .flatten 并将其附加到列表中

val existingList = List(1, 2, 3)
val a = Some(4)
val b = None
val c = Some(5)
val newList = existingList ::: List(a, b, c).flatten
def foo(a: Option[String], b: Option[String], c: Option[String]): List[String] =
    List("hey") ++ a.toList ++ b.toList ++ c.toList

类似于 flattenflatMap .

scala> foo(Some("a"), None, Some("c"))
res1: List[String] = List(hey, a, c)

最好定义一个像这样的泛型函数:

def foo[T](xs: Option[T]*) : List[T] =
    xs.toList.flatten
scala> foo(Some("a"), None, Some("c"))
res2: List[String] = List(a, c)

val list = List("A", "B", "C")val opts = = List(Some("X"), None, Some("Y"), None, Some("Z")) .然后list ++ opts.filter(_.isDefined).map(_.get)将给出一个新的List("A", "B", "C", "X", "Y", "Z"),其中包含 list 中的所有元素和 opts 的所有非空元素。

相关内容

  • 没有找到相关文章

最新更新