我已经创建了一个空的scala可变列表
import scala.collection.mutable.ListBuffer
val list_of_list : List[List[String]] = List.empty
我想在其中添加以下元素。
filtered_df.collect.map(
r => {
val val_list = List(r(0).toString,r(4).toString,r(5).toString)
list_of_list += val_list
}
)
我得到的错误是
Error:(113, 26) value += is not a member of List[List[String]]
Expression does not convert to assignment because receiver is not assignable.
list_of_list += val_list
谁能帮帮我
你的声明似乎有问题。
val list_of_list : List[List[String]] = List.empty
意思是你声明了 scala.collection.immutable.List
的操作返回一个新的列表,而不改变当前的列表。
要解决这个错误,你需要改变外链的 List
拟 ListBuffer
你在声明上面导入的内容如下。
val list_of_list : ListBuffer[List[String]] = ListBuffer.empty
而且看起来你也没有使用 map
除非你想修改你的数据,否则你可以在这里修改从 DataFrame
所以你可以把它改成 foreach
:
filtered_df.collect.foreach {
r => {
val val_list = List(r(0).toString,r(4).toString,r(5).toString)
list_of_list += val_list
}
}
此外,你可以使它在一个功能的方式,而不是诉诸于。ListBuffer
,通过使用不可改变的 List
和 foldRight
如下。
val list_of_list: List[List[String]] =
filtered_df.collect.toList
.foldRight(List.empty[List[String]])((r, acc) => List(r(0).toString,r(4).toString,r(5).toString) :: acc)
toList
是用来实现堆栈安全的,当调用 foldRight
, 因为它不是堆栈安全的 Arrays
你必须改变这一点 val list_of_list
到 var list_of_list
. 仅仅是这样还不够,因为你还必须改变类型的。list_of_list
变成 mutable
另一种选择。