说我有这样的地图:
val m: Map[Int, String] = Map(1 -> "a", 2 -> "b", 3 -> "c", 4 -> "d", ...)
Run Code Online (Sandbox Code Playgroud)
假设我有一个功能:def f(i: Int): String
我想要应用于这张地图的按键.然后,我希望按结果f(键)进行分组,并连接属于同一f(键)组的所有字符串(值).
在普通scala(无火花)中映射键时,是否有一种有效的方法来"groupByKey".
如果我了解情况,你有一张地图......
val m: Map[K,V] = ...
Run Code Online (Sandbox Code Playgroud)
...以及转换键的函数/方法......
def f(k: K):J = ... //K and J can be same type
Run Code Online (Sandbox Code Playgroud)
...并且您希望将密钥分组Map
,然后将所有值从其中收集Map
到新组中.
m.keys //Iterable[K]
.toList //List[K]
.groupBy(f) //Map[J,List[K]]
.mapValues(_.map(m)) //Map[J,List[V]]
Run Code Online (Sandbox Code Playgroud)
如果您的原件V
本身就是原件,List
那么您可以flatMap()
而不是map()
将结果展平.
该toList
步骤是可选的.如果没有它,结果就是Map[J,Iterable[V]]
.
归档时间: |
|
查看次数: |
1824 次 |
最近记录: |