我对Scala非常陌生,我正在努力研究如何使用集合。如果我有一个ListPeople (所有人都有名字),那么是否有办法将其转换为Map[Person.getName,ListPeople]。
我试过了
list map (t => t.getName() -> t) toMap, 但这只会返回一个MapName,伙计们。我该怎么做?
提前谢谢。
发布于 2016-06-15 21:05:59
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)))发布于 2016-06-16 02:48:40
如果您想自己动手并学习它的工作原理,您可以尝试如下:
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)))干杯
https://stackoverflow.com/questions/37845613
复制相似问题