如何声明空列表,然后在scala中添加string?

我有这样的代码:

val dm = List[String]() val dk = List[Map[String,Object]]() ..... dm.add("text") dk.add(Map("1" -> "ok")) 

但它会抛出运行时java.lang.UnsupportedOperationException。

我需要声明空列表或空地图,以及稍后在代码中需要填充的地图。

Scala列表默认是不可变的。 你不能“添加”一个元素,但是你可以通过在前面添加新的元素来形成一个新的列表。 由于它是一个新的列表,你需要重新分配引用(所以你不能使用val)。

 var dm = List[String]() var dk = List[Map[String,AnyRef]]() ..... dm = "text" :: dm dk = Map(1 -> "ok") :: dk 

operator ::创build新的列表。 您也可以使用较短的语法:

 dm ::= "text" dk ::= Map(1 -> "ok") 

注意:在scala中不要使用Objecttypes, AnyAnyRefAnyVal

如果你需要改变东西,请改用ArrayBufferLinkedBuffer 。 但是,最好是这样说:

我需要声明空列表或空地图,以及稍后在代码中需要填充的地图。

而不是这样做,用返回元素的代码填充列表。 这样做有很多方法,我会举几个例子:

 // Fill a list with the results of calls to a method val l = List.fill(50)(scala.util.Random.nextInt) // Fill a list with the results of calls to a method until you get something different val l = Stream.continually(scala.util.Random.nextInt).takeWhile(x => x > 0).toList // Fill a list based on its index val l = List.tabulate(5)(x => x * 2) // Fill a list of 10 elements based on computations made on the previous element val l = List.iterate(1, 10)(x => x * 2) // Fill a list based on computations made on previous element, until you get something val l = Stream.iterate(0)(x => x * 2 + 1).takeWhile(x => x < 1000).toList // Fill list based on input from a file val l = (for (line <- scala.io.Source.fromFile("filename.txt").getLines) yield line.length).toList 

正如大家已经提到的,这不是在Scala中使用列表的最佳方式…

 scala> val list = scala.collection.mutable.MutableList[String]() list: scala.collection.mutable.MutableList[String] = MutableList() scala> list += "hello" res0: list.type = MutableList(hello) scala> list += "world" res1: list.type = MutableList(hello, world) scala> list mkString " " res2: String = hello world 

在scala中默认的集合是不可变的,所以你有一个+方法返回一个添加元素的新列表。 如果你真的需要像add方法一样的东西,你需要一个可变的集合,例如http://www.scala-lang.org/api/current/scala/collection/mutable/MutableList.html ,它有一个+ =方法。

也许你可以在Scala中使用ListBuffers创build空列表,并在稍后添加string,因为ListBuffers是可变的。 所有List函数也可用于Scala中的ListBuffers。

 import scala.collection.mutable.ListBuffer val dm = ListBuffer[String]() dm: scala.collection.mutable.ListBuffer[String] = ListBuffer() dm += "text1" dm += "text2" dm = ListBuffer(text1, text2) 

如果你想要,你可以通过使用.toList将其转换为列表

在你的情况下,我使用: val dm = ListBuffer[String]()val dk = ListBuffer[Map[String,anyRef]]()