我对Scala很新,并且正在努力弄清楚如何使用Collections。如果我有一个List [People],所有人都有名字,有没有办法把它变成Map [Person.getName,List [People]]。
我试过
list map (t => t.getName() -> t) toMap,
但只返回Map [Name,People]。我该怎么做?
提前致谢。
答案 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)))
干杯