我有一个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中做到这一点?
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)))
假设您有一个案例类Students
,类似下面的内容将为您提供一个由所有分数高于50的学生的学生ID键入的地图。
case class Students(id:Int, subject:String, score:Int)
val result = scores.groupBy(_.id).filter(_._2.forall(_.score > 50))