Scala组通过映射键

use*_*285 0 scala

说我有这样的地图:

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".

jwv*_*wvh 5

如果我了解情况,你有一张地图......

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]].