在scala中的Seq中添加项目

时间:2016-09-06 06:11:19

标签: scala seq

我正在使用光滑的scala play 2。 我有一个像Seq一样的

val customerList: Seq[CustomerDetail] = Seq(CustomerDetail("id", "status", "name"))

我想在此customerList中添加一个CustomerDetail项。我怎样才能做到这一点? 我已经尝试了

customerList :+ CustomerDetail("1", "Active", "Shougat")

但这并没有做任何事情。

2 个答案:

答案 0 :(得分:7)

两件事。当您使用poll()时,操作是左关联,这意味着您调用方法的元素应位于左侧。

现在,:+(在您的示例中使用)引用Seq。当您追加或添加元素时,它会返回包含额外元素的新序列,它不会将其添加到现有序列中。

immutable.Seq

但附加元素意味着遍历整个列表以添加项目,请考虑预先添加:

val newSeq = CustomerDetail("1", "Active", "Shougat") :+ customerList

简化示例:

val newSeq = customerList +: CustomerDetail("1", "Active", "Shougat")

答案 1 :(得分:1)

值得指出的是,虽然Seq追加项运算符:+左关联,但前置运算符+:是< em>右关联。

因此,如果您拥有SeqList元素集合:

scala> val SeqOfLists: Seq[List[String]] = Seq(List("foo", "bar"))
SeqOfLists: Seq[List[String]] = List(List(foo, bar))

并且您想要向Seq添加另一个“elem”,以这种方式添加:

scala> SeqOfLists :+ List("foo2", "bar2")
res0: Seq[List[String]] = List(List(foo, bar), List(foo2, bar2))

并且以这种方式进行前置:

scala> List("foo2", "bar2") +: SeqOfLists
res1: Seq[List[String]] = List(List(foo2, bar2), List(foo, bar))

API doc

中所述
  

+:vs.:+的助记符是:COLon在COLlection一侧。

在处理集合集合时忽略这一点可能会导致意外结果,即:

scala> SeqOfLists +: List("foo2", "bar2")
res2: List[Object] = List(List(List(foo, bar)), foo2, bar2)