我知道这可能是Scala中一个非常简单的List操作,但我是一个新手,无法弄明白.我有一个查询返回一个结果集,其中包含一系列值,按公共ID分组.例如:
结果集:
[{ 1, "a", 30 },
{ 1, "b", 20 },
{ 1, "c", 22 },
{ 2, "a", 32 },
{ 2, "c", 10 }]
Run Code Online (Sandbox Code Playgroud)
而我想要做的就是将其放入地图中:
1 -> [{"a", 30}, {"b", 20}, {"c", 22}]
2 -> [{"a", 32}, {"c", 10}]
Run Code Online (Sandbox Code Playgroud)
我认为collect方法可以用于此但无法弄清楚.
dhg*_*dhg 10
我不确定您的数据结构中的类型是什么,但也许您可以调整它.假设您有一组元组:
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)))
Run Code Online (Sandbox Code Playgroud)
或者,更简洁:
items.groupBy(_._1).mapValues(_.map(t => (t._2, t._3)))
Run Code Online (Sandbox Code Playgroud)
该collect方法完全不同(基本上,它map会丢弃不匹配的值).这个groupBy方法就是你真正想要的.
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |