繁体   English   中英

如何使用scala在列表中创建一组相同的元素?

[英]How to make group of same elements in list using scala?

假设我们有一个案例班学生

case class Student(name: String,roll: String)

和学生名单

List(Student("a","123"),Student("b","345"),Student("a","678"),Student("b","321"))

我想建立同名的群组,例如

List(Student("a","123"),Student("a","678")) , List(Student("b","345"),Student("b","321"))

如何使用Scala做到这一点?

这是一种实现方法:

case class Student(name: String,roll: String)

val list = List(Student("a","123"),Student("b","345"),Student("a","678"),Student("b","321"))

val groupedList = list.groupBy(_.name).values.toList
// groupedList: List[List[Student]] = List(
//   List(Student(b,345), Student(b,321)), List(Student(a,123), Student(a,678))
// )

如果您要查找List[List[Student]]则需要将Student分组为列表

val groups = List( List(Student("a","123"),Student("a","678")), List(Student("b","345"),Student("b","321")) )

如果您正在寻找Map[String, List[Student]]

val groups = Map("a" -> List(Student("a","123"),Student("a","678")), "b" -> List(Student("b","345"),Student("b","321")))

您可以在列表上使用groupBy ,然后提取值

scala> case class Student(name: String,roll: String)
defined class Student

scala> val l = List(Student("a","123"),Student("b","345"),Student("a","678"),Student("b","321"))
l: List[Student] = List(Student(a,123), Student(b,345), Student(a,678), Student(b,321))

scala> l.groupBy(_.name).values.toList
res0: List[List[Student]] = List(List(Student(b,345), Student(b,321)), List(Student(a,123), Student(a,678)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM