2011-12-30 16 views
5

私は文書の所有者を所有している文書のリストを持っています。要素のマップにリストを変換する→スカラー内のリスト(要素)

このリストを自分の所有するドキュメントリストへのユーザーマップに変換する最もエレガントな方法は何ですか?

だから私は持っている例えば:

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

私はマップで終わる必要があります。

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

私は文書からすべてのユニークユーザーをつかむことであろう一つの方法を考えることができますそれぞれが自分のものになるようにドキュメントリストをフィルタリングしますが、リストが大きい場合はパフォーマンス上の問題を防ぐためにリストを一定の回数だけ使用する方法があるのだろうかと思います。

答えて

13

使用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))) 
関連する問題