1

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

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

因为,一个作者可能写了很多书,我可能有同一个作者在这个列表中有不同的书,所以我想按作者对书进行分组,并有一个 Map[Author, List[Book]] 代替。

我怎样才能做到这一点?

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

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

任何帮助,将不胜感激。

多谢你们

4

2 回答 2

2

你可以做:

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

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

于 2013-08-28T21:42:34.937 回答
-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 的建议,它已经为您处理好了。

于 2013-08-29T08:21:33.340 回答