Este grupo redactor ha estado largas horas buscando la resolución a tu pregunta, te regalamos la soluciones por esto nuestro deseo es serte de mucha apoyo.
Solución:
Dos cosas. cuando usas :+
la operación es asociativo por la izquierdalo que significa que el elemento al que está llamando el método debe estar en el lado izquierdo.
Ahora, Seq
(como se usa en su ejemplo) se refiere a immutable.Seq
. Cuando agrega o antepone un elemento, devuelve un nueva secuencia que contiene el elemento adicional, no lo agrega a la secuencia existente.
val newSeq = customerList :+ CustomerDetail("1", "Active", "Shougat")
Pero agregar un elemento significa recorrer toda la lista para agregar un elemento, considere anteponer:
val newSeq = CustomerDetail("1", "Active", "Shougat") +: customerList
Un ejemplo simplificado:
scala> val original = Seq(1,2,3,4)
original: Seq[Int] = List(1, 2, 3, 4)
scala> val newSeq = 0 +: original
newSeq: Seq[Int] = List(0, 1, 2, 3, 4)
Podría valer la pena señalar que mientras el Seq
agregar operador de elemento, :+
es asociativo por la izquierdael operador antepuesto, +:
es asociativo derecho.
Así que si tienes un Seq
colección con List
elementos:
scala> val SeqOfLists: Seq[List[String]] = Seq(List("foo", "bar"))
SeqOfLists: Seq[List[String]] = List(List(foo, bar))
y desea agregar otro “elemento” a la secuencia, la adición se realiza de esta manera:
scala> SeqOfLists :+ List("foo2", "bar2")
res0: Seq[List[String]] = List(List(foo, bar), List(foo2, bar2))
y anteponer se hace de esta manera:
scala> List("foo2", "bar2") +: SeqOfLists
res1: Seq[List[String]] = List(List(foo2, bar2), List(foo, bar))
como se describe en el documento API:
Un mnemotécnico para +: vs. :+ es: COLon va en el lado COLlection.
Descuidar esto cuando se manejan colecciones de colecciones puede conducir a resultados inesperados, es decir:
scala> SeqOfLists +: List("foo2", "bar2")
res2: List[Object] = List(List(List(foo, bar)), foo2, bar2)
Puedes añadir valor a nuestra información colaborando tu veteranía en las crónicas.