繁体   English   中英

将列表转换为元素的映射 - > scala中的list(元素)

[英]Transform list in to map of element -> list(element) in scala

我有一个文档列表,其中Document拥有一个用户的所有者。

将此列表转换为用户地图到他们拥有的文档列表的最优雅方法是什么?

所以我举例说:

"doc1" owned by user "John"
"doc2" owned by user "Frank"
"doc3" owned by user "John"

我应该得到一张地图:

"John" -> List("doc1", "doc3"), "Frank" -> List("doc2")

我可以想到一种方法是从文档中获取所有唯一用户,并且每个用户都将文档列表过滤为他们拥有的文档列表,但我想知道是否有使用固定数量的传递的方法如果列表很大,通过列表来防止任何性能问题。

使用groupBy:

scala> case class Doc(id: String, owner: String)
defined class Doc

scala> List(Doc("doc1", "John"), Doc("doc2", "Frank"), Doc("doc3", "John"))
res0: List[Doc] = List(Doc(doc1,John), Doc(doc2,Frank), Doc(doc3,John))

scala> res0.groupBy(_.owner)
res1: scala.collection.immutable.Map[String,List[Doc]] = Map(
  Frank -> List(Doc(doc2,Frank)), John -> List(Doc(doc1,John), Doc(doc3,John)))

暂无
暂无

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

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