scala中的列表列表

时间:2015-09-18 14:06:28

标签: list scala reduce

我想知道如何在reduce操作的结果中创建List列表。

我就是这样的行

1,2,3,4
0,7,8,9
1,5,6,7
0,6,5,7

我想得到类似的东西

1, [[2,3,4],[5,6,7]]
0, [[7,8,9],[6,5,7]]

Thsi是我的代码

val parsedData = data.map { line =>
    val parts = line.split(",")
    val label = Integer.parseInt(parts(0))
    (label, List(Integer.parseInt(parts(1)), Integer.parseInt(parts(2)), Integer.parseInt(parts(3)))
}

有了这个,我得到了

1, [2,3,4]
0, [7,8,9]
1, [5,6,7]
0, [6,5,7]

但如果我对reduceByKey使用List.concat(_,_)操作,我会得到一个包含所有项目的列表。

parsedData.reduceByKey(List.concat(_,_))

我想要一个列表,按键减少。

还有其他一些我不知道的操作吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这是一个有效的例子:

val data = "1,2,3,4\n0,7,8,9\n1,5,6,7\n0,6,5,7".split("\n")

val parsedData = data.map{ line =>
  val parts = line.split(",")
  val label = Integer.parseInt(parts(0))
  (label, List(Integer.parseInt(parts(1)), Integer.parseInt(parts(2)), Integer.parseInt(parts(3))))
}.toList
//parsedData: List[(Int, List[Int])] = List((1,List(2, 3, 4)), (0,List(7, 8, 9)), (1,List(5, 6, 7)), (0,List(6, 5, 7)))

parsedData.groupBy(_._1).mapValues(_.map(_._2))
// Map(1 -> List(List(2, 3, 4), List(5, 6, 7)), 0 -> List(List(7, 8, 9), List(6, 5, 7)))

答案 1 :(得分:0)

我不确定这是你正在寻找的结论。

你能试试吗:

parsedData.reduceByKey(_ :: _ :: Nil)

这应该在字面上创建一个包含

元素的新列表