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

时间:2020-05-16 12:03:12

标签: scala scala-collections

我创建了一个空的Scala可变列表

forEach

我要向其添加元素,如下所示

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
          }
        )

有人可以帮忙吗

2 个答案:

答案 0 :(得分:1)

您的声明似乎有误:

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
  }
}

此外,您可以通过使用不变的ListBufferList来以一种实用的方式实现它,而无需诉诸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用于在调用foldRightbecause it's not stack safe for Arrays

时实现堆栈安全

More info about foldLeft and foldRight

答案 1 :(得分:0)

您必须将val list_of_list更改为var list_of_list。仅凭这还不够,因为您还必须将list_of_list的类型更改为mutable的替代方式。

相关问题