2011-12-30 14 views
5

Belge, bir Kullanıcı'nın sahibi olan bir belge listesi var.Öğenin Haritasına Dönüştürme Listesi -> Liste (öğe) scala'da

Bu listeyi, Kullanıcı Haritasına sahip oldukları Belge Listesi'ne dönüştürmenin en zarif yolu nedir?

Yani örneğin ben vardır:

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

Ben bir harita ile bitmelidir:

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

Ben belgelerden tüm benzersiz kullanıcıları kapmak olacaktır tek yol düşünebiliriz ve her biri için belge listesini yalnızca sahip olduklarına göre filtreleyebilirsiniz, ancak liste büyükse herhangi bir performans sorununu önlemek için listeden sabit sayıda geçişi kullanmanın bir yolu olup olmadığını merak ediyorum.

cevap

13

Kullanım 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)))