使用foreach将List添加到ListBuffer

时间:2014-08-22 13:57:58

标签: scala apache-spark scala-collections

我正在使用Mahout FPGrowth算法,但坚持预处理数据。

FPGrowth算法的输入是:           val数据:List [JPair [JList [String],JLong]]

在我工作的早期阶段,我用硬编码的输入数据进行了测试。

val data: List[JPair[JList[String], JLong]] = List(
  new JPair(List("bread", "beer", "fries", "butter"), 1L),
  new JPair(List("milk", "bread"), 1L),
  new JPair(List("butter", "beer", "fries"), 1L),
  new JPair(List("bread", "beer"), 1L),
  new JPair(List("milk", "butter", "bread", "beer"), 1L)
)

有效。但我想自动填写清单。我在scala中读到了这可以使用ListBuffers。我试图在foreach步骤中填充ListBuffer。但这不起作用。

parsedData.foreach( p =>  ListBuf += new JPair(p.str, 1L) )
val ItemSet = ListBuf.toList

在应用程序的末尾,列表(ItemSet)仍为空。

有人有想法吗?

1 个答案:

答案 0 :(得分:4)

在没有看到初始化ListBuf的代码的情况下,它有点难以辨别,但是让我建议一个更好的方法,它不涉及可变集合。

您希望通过对parsedData的每个元素应用转换来生成新集合,而这正是map所做的。这是一个例子

val data = parsedData.map(new JPair(JString(_.str), JLong(1L)))

我明确使用了JStringJLong构造函数,因此您不必注释该类型。