将元素追加到scala中的列表列表

将元素追加到scala中的列表列表,scala,scala-collections,Scala,Scala Collections,我创建了一个空的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)

我创建了一个空的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\u of_list
更改为
var list\u of_list
。仅此一项是不够的,因为您还必须将列表的类型更改为可更改的替代项。

您的声明似乎是错误的:

val list_of_list : List[List[String]] = List.empty
表示您已声明了
scala.collection.immutable.List
,其操作将返回一个新列表,而不更改当前列表

要修复此错误,您需要将在声明上方导入的外部
列表
类型更改为
列表缓冲区
,如下所示:

val list_of_list : ListBuffer[List[String]] = ListBuffer.empty
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)

此外,除非您想修改从
DataFrame
收集的数据,否则这里似乎不需要使用
map
,因此您可以将其更改为
foreach

filtered_df.collect.foreach {
  r => {
    val val_list = List(r(0).toString,r(4).toString,r(5).toString)
    list_of_list += val_list
  }
}

此外,通过使用不可变的
List
foldRight
,您可以在不使用
ListBuffer
的情况下以功能性的方式创建它,如下所示:

val list_of_list : ListBuffer[List[String]] = ListBuffer.empty
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
时实现堆栈安全


您必须将
val list\u of_list
更改为
var list\u of_list
,还必须将
list\u of_list
的类型更改为可变的可选类型不幸的是
foldRight
不是堆栈安全的,我更喜欢
foldLeft
而不是
foldRight
foldLeft
是堆栈safe@BorisAzanov你说得对。它仅对不可变的
列表
是堆栈安全的。编辑了答案