我正在使用光滑的scala play 2。 我有一个像Seq一样的
val customerList: Seq[CustomerDetail] = Seq(CustomerDetail("id", "status", "name"))
我想在此customerList中添加一个CustomerDetail项。我怎样才能做到这一点? 我已经尝试了
customerList :+ CustomerDetail("1", "Active", "Shougat")
但这并没有做任何事情。
答案 0 :(得分:7)
两件事。当您使用poll()
时,操作是左关联,这意味着您调用方法的元素应位于左侧。
现在,:+
(在您的示例中使用)引用Seq
。当您追加或添加元素时,它会返回包含额外元素的新序列,它不会将其添加到现有序列中。
immutable.Seq
但附加元素意味着遍历整个列表以添加项目,请考虑预先添加:
val newSeq = CustomerDetail("1", "Active", "Shougat") :+ customerList
简化示例:
val newSeq = customerList +: CustomerDetail("1", "Active", "Shougat")
答案 1 :(得分:1)
值得指出的是,虽然Seq
追加项运算符:+
是左关联,但前置运算符+:
是< em>右关联。
因此,如果您拥有Seq
个List
元素集合:
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)