首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:接受List[People]并将其转换为Map[String,List[People]]

Scala:接受List[People]并将其转换为Map[String,List[People]]
EN

Stack Overflow用户
提问于 2016-06-15 20:55:40
回答 2查看 120关注 0票数 1

我对Scala非常陌生,我正在努力研究如何使用集合。如果我有一个ListPeople (所有人都有名字),那么是否有办法将其转换为Map[Person.getName,ListPeople]。

我试过了

代码语言:javascript
复制
list map (t => t.getName() -> t) toMap, 

但这只会返回一个MapName,伙计们。我该怎么做?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 21:05:59

groupBy将获取一个List[People],并根据您提供的“判别器函数”将其转换为Map[String, List[People]],在本例中,该函数将从Person中选择名称。

代码语言:javascript
复制
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)))
票数 6
EN

Stack Overflow用户

发布于 2016-06-16 02:48:40

如果您想自己动手并学习它的工作原理,您可以尝试如下:

代码语言:javascript
复制
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)))

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37845613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档