2011-12-30 4 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)))