繁体   English   中英

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

[英]How to transform a List[Tuple2[X,Y]] to a Map[X, List[Y]] to avoid duplicates in Scala?

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

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

因为一个作者可能写了很多书,所以在这个列表中我可能有同一位作者而其他书也不同,所以我想按作者对这些书进行分组,而是使用Map [A​​uthor,List [Book]]。

我该如何实现?

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

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

任何帮助,将不胜感激。

多谢你们

你可以做:

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

groupBy创建具有所需键的Map,但是值中仍然包含键,它们是List [(X,Y)]而不是List [Y]。 mapValues调用可解决此问题。

有一个内置函数可用于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的建议,已经为您解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM