我创建了一个空的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
}
)
有人可以帮忙吗
答案 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
}
}
此外,您可以通过使用不变的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
,because it's not stack safe for Arrays
答案 1 :(得分:0)
您必须将val list_of_list
更改为var list_of_list
。仅凭这还不够,因为您还必须将list_of_list
的类型更改为mutable
的替代方式。