我试图弄清楚如何使用 groupBy 将元组列表转换为Map。假设我正在以这种方式从DB中检索列表:
val results: List[(Author, Book)] = getAuthorAndBook()
因为,作者可能已经写了很多书,我可能在这个列表中有相同的作者和不同的书籍,所以我想按作者对书籍进行分组,然后有一个地图[作者,列表[书]]。 / p>
我怎样才能做到这一点?
我知道我必须分组,但在那之后,我不太确定如何处理这些书
results.groupBy(_._1) // and then what ?
任何帮助将不胜感激。
谢谢你们
答案 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建议的东西,它已经为你处理了。