Scala фильтр список при условии - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть объект 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 баллов по всем предметам. Сейчас я делаю это путем итерации, помещая значение в карту и проверяя перепроверку, как мы делаем в Java. Как мы можем сделать это в Scala?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

При условии, что у вас есть класс кейса Students, что-то вроде следующего даст вам карту с указанием ID студента для студентов со всеми результатами выше 50.

case class Students(id:Int, subject:String, score:Int)
val result = scores.groupBy(_.id).filter(_._2.forall(_.score > 50))
0 голосов
/ 01 сентября 2018
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)))
...