我有一个Seq[(A, B)]
. 我想为这样的集合添加一个隐式方法,这样我就可以.toMultiMap
取回一个Map[A, Seq[B]]
.
这是我的第一次尝试:
implicit class PairsExtensions[A, B](t: Traversable[(A, B)]) {
def toMultiMap: Map[A, Traversable[B]] = t.groupBy(_._1).mapValues(_.map(_._2))
}
但是,现在的问题是我总是得到一个Traversable
值。Map[A, Set[B]]
如果我这样做,我想取回一个Set[(A, B)].toMultiMap
。
所以,然后我尝试了这样的事情:
implicit class PairsExtensions2[A, B, Repr[_] <: Traversable[(A, B)]](t: TraversableLike[(A, B), Repr[(A, B)]]) {
def toMultiMap(implicit bf: CanBuild[B, Repr[B]]): Map[A, Repr[B]] = t.groupBy(_._1).mapValues(_.map(_._2))
}
但是,它不起作用:
val m1: Map[Int, Set[String]] = Set.empty[(Int, String)]
val m2: Map[Int, List[String]] = List.empty[(Int, String)]
这样做的方法是什么?