如何向列表中添加元组并避免java.lang.UnsupportedOperationException错误

3

当我尝试将一个(Int,String)类型的对象添加到List中时,我会收到以下异常:

var data = List((10, "test1"))                    
data.add((11, "here"))  

java.lang.UnsupportedOperationException
java.util.AbstractList.add(AbstractList.java:131)
java.util.AbstractList.add(AbstractList.java:91)

如何将元组 (11, "here") 添加到列表 'data' 中?

为什么我会收到此异常?


你是否正在使用Java列表?因为,否则这段代码将无法编译(至少在Scala 2.8-2.10上)。List是如何定义的? - om-nom-nom
1个回答

10

你已经导入了scala.collection.JavaConversions._,并且试图在Scala不可变列表上使用Java可变的add操作。

这是行不通的!

也许你只想要

var data = List((1, "one"))
data = (2, "two") :: data

这将元组前置到数据。追加的语法是什么? data = data + (2, "two") - Haider
3
@Haider - 你可以使用data = data :+ ((2, "two")),但是你不应该使用List来实现。列表的附加操作速度较慢。如果你正在构建一个列表,应该在开头添加元素,最后再将整个列表反转(或者使用List.newBuilder+=进行可变的构建,然后使用result生成不可变的List)。 - Rex Kerr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接