如何替换列表中的给定项?

Ska*_*Ska 7 scala list

这很好地描述了这个问题:

scala> var l2 = List(1,2,3)
l2: List[Int] = List(1, 2, 3)

scala> l2(2) = 55
<console>:10: error: value update is not a member of List[Int]
              l2(2) = 55
              ^
Run Code Online (Sandbox Code Playgroud)

Cal*_*lum 27

scala.List不可变的,这意味着你无法在适当的位置更新它.如果要创建包含更新映射的List 副本,可以执行以下操作:

val updated = l2.updated( 2, 55 )
Run Code Online (Sandbox Code Playgroud)

还有可变的有序序列类型scala.collection.mutable,例如Buffer看起来更像你想要的类型.如果你尝试以下方法,你应该取得更大的成功:

scala> import scala.collection._
import scala.collection._
scala> val b = mutable.Buffer(1,2,3)
b: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)
scala> b(2) = 55
scala> b
res1: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 55)
Run Code Online (Sandbox Code Playgroud)

编辑:只是要注意,其他一些答案提到你应该使用"可变列表类型" - 这是真的,但Scala中的"List"只引用单链表,而在Java中它通常用于任何有序的,随机访问集合.还有一个DoubleLinkedList,更像是Java LinkedList,和a MutableList,它是一种用于其他类型内部的类型.

一般来说,Scala中您可能想要的是Buffer这项工作; 特别是因为默认实现是一个ArrayBuffer,与ArrayListJava中的大多数人的默认值非常接近.

但是,如果你想知道Java集合接口与Scala世界最接近的"映射"是什么,最简单的方法就是检查JavaConversions的作用.在这种情况下,您可以看到映射是Buffer:

scala.collection.mutable.Buffer <=> java.util.List
Run Code Online (Sandbox Code Playgroud)