Scala过滤器列表条件

问题描述 投票:0回答:2

我有一个Seq of Student对象,他们在不同科目中得分。例如

Vector(Students(1,Math,40),Students(1,English,60), Students(1,Science,55), Students(2,Math,80),Students(2,English,60), Students(2,Science,55),Students(3,Math,40),Students(3,English,60), Students(3,Science,30))

我想要所有科目中得分超过50的学生名单。现在我通过迭代,将值放在map中并检查重新检查,就像我们在java中一样。我们怎么能在Scala中做到这一点?

scala seq
2个回答
2
投票
case class Students(rollNo:Int, subject:String, marks:Double)

val students = Vector(Students(1,Math,40),Students(1,English,60), Students(1,Science,55), Students(2,Math,80),Students(2,English,60), Students(2,Science,55),Students(3,Math,40),Students(3,English,60), Students(3,Science,30))

val studentsGroup = students.groupBy(_.rollNo)
val ans = studentsGroup.filter(_.2.forall(_.marks>50))
println(ans)
//output Map(2 -> Vector(Students(2,Math,80.0), Students(2,English,60.0), Students(2,Science,55.0)))

0
投票

假设您有一个案例类Students,类似下面的内容将为您提供一个由所有分数高于50的学生的学生ID键入的地图。

case class Students(id:Int, subject:String, score:Int)
val result = scores.groupBy(_.id).filter(_._2.forall(_.score > 50))
© www.soinside.com 2019 - 2024. All rights reserved.