Scala:列出[人物]并将其转换为地图[String,List [People]]

时间:2016-06-15 20:55:40

标签: scala dictionary collections

我对Scala很新,并且正在努力弄清楚如何使用Collections。如果我有一个List [People],所有人都有名字,有没有办法把它变成Map [Person.getName,List [People]]。

我试过

list map (t => t.getName() -> t) toMap, 

但只返回Map [Name,People]。我该怎么做?

提前致谢。

2 个答案:

答案 0 :(得分:6)

groupBy将根据"鉴别器功能"将List[People]转换为Map[String, List[People]]。在这种情况下,您提供的是从Person

中选择名称
scala> case class Person(name: String, age:Int)
defined class Person

scala> val people = List(Person("Alice", 42), Person("Bob", 42))
people: List[Person] = List(Person(Alice,42), Person(Bob,42))

scala> people.groupBy(p => p.name)
res0: scala.collection.immutable.Map[String,List[Person]] = Map(Bob -> List(Person(Bob,42)), Alice -> List(Person(Alice,42)))

答案 1 :(得分:0)

如果你想自己动手并了解它是如何运作的,你可以试试这个:

scala> case class Person(name: String, surname: String, age:Int)
defined class Person

scala> val people = List(Person("Alice", "Wonderland", 42), Person("Bob", "Father", 42), Person("Bob", "Son", 20))
people: List[Person] = List(Person(Alice,Wonderland,42), Person(Bob,Father,42), Person(Bob,Son,20))

scala> val names = people.map(_.name).distinct
names: List[String] = List(Alice, Bob)

scala> names.map(n => n -> people.filter(_.name == n)).toMap
res0: scala.collection.immutable.Map[String,List[Person]] = Map(Alice -> List(Person(Alice,Wonderland,42)), Bob -> List(Person(Bob,Father,42), Person(Bob,Son,20)))

干杯