在scala中把元素追加到list的list上

问题描述 投票:0回答:1

我已经创建了一个空的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

谁能帮帮我

list scala apache-spark mutable
1个回答
1
投票

你的声明似乎有问题。

val list_of_list : List[List[String]] = List.empty

意思是你声明了 scala.collection.immutable.List 的操作返回一个新的列表,而不改变当前的列表。

要解决这个错误,你需要改变外链的 ListListBuffer 你在声明上面导入的内容如下。

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,通过使用不可改变的 ListfoldRight 如下。

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

更多关于 foldLeftfoldRight


0
投票

你必须改变这一点 val list_of_listvar list_of_list. 仅仅是这样还不够,因为你还必须改变类型的。list_of_list 变成 mutable 另一种选择。

© www.soinside.com 2019 - 2024. All rights reserved.