如何将List [Tuple2 [X,Y]]转换为Map [X,List [Y]]以避免Scala中的重复?

时间:2013-08-28 21:31:46

标签: list scala map group-by scala-collections

我试图弄清楚如何使用 groupBy 将元组列表转换为Map。假设我正在以这种方式从DB中检索列表:

val results: List[(Author, Book)] = getAuthorAndBook()

因为,作者可能已经写了很多书,我可能在这个列表中有相同的作者和不同的书籍,所以我想按作者对书籍进行分组,然后有一个地图[作者,列表[书]]。 / p>

我怎样才能做到这一点?

我知道我必须分组,但在那之后,我不太确定如何处理这些书

results.groupBy(_._1) // and then what ?

任何帮助将不胜感激。

谢谢你们

2 个答案:

答案 0 :(得分:2)

你可以这样做:

results.groupBy(_._1).mapValues(_.map(_._2))

groupBy使用所需的键创建一个Map,但值仍然包含其中的键,它们是List [(X,Y)]而不是List [Y]。 mapValues调用解决了这个问题。

答案 1 :(得分:-1)

有一个内置函数可以为Tuple2列表执行此操作。

val list = List( (1,"toto") , (2,"test") )
list: List[(Int, java.lang.String)] = List((1,toto), (2,test))

list.toMap
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,toto), (2,test))

你不需要wingedsubmariner建议的东西,它已经为你处理了。