3

我知道这可能是 Scala 中一个非常简单的 List 操作,但我是新手,无法弄清楚。我有一个查询,它返回一个包含一系列值的结果集,这些值按一个公共 id 分组。例如:

结果集:

[{ 1, "a", 30 },
{ 1, "b", 20 },
{ 1, "c", 22 },
{ 2, "a", 32 },
{ 2, "c", 10 }]

我想做的就是把它放到这样的地图中:

1 -> [{"a", 30}, {"b", 20}, {"c", 22}]
2 -> [{"a", 32}, {"c", 10}]

我认为 collect 方法可以用于此,但无法弄清楚。

4

1 回答 1

11

我不确定您的数据结构中的类型是什么,但也许您可以调整它。这假设您有一组元组:

val items = 
  List((1, "a", 30),
       (1, "b", 20),
       (1, "c", 22),
       (2, "a", 32),
       (2, "c", 10))

items
  .groupBy{ case (a,b,c) => a }
  .mapValues(_.map{ case (a,b,c) => (b,c) })

// Map(1 -> List((a,30), (b,20), (c,22)), 2 -> List((a,32), (c,10)))

或者,更简洁地说:

items.groupBy(_._1).mapValues(_.map(t => (t._2, t._3)))

collect方法完全是另一回事(基本上,它map会丢弃不匹配的值)。该groupBy方法是您真正想要的。

于 2012-05-10T20:33:50.293 回答