Group the strings with occurrence count from a List using scala
Feb 14, 2024
package exercise
import scala.collection.mutable
object UniqueElementsWithCount extends App {
/*
input - List(Student("abc"), Student("def"), Student("abc"))
case class Student(name: String)
o/p : Map("abc" -> 2, "def" -> 1)
*/
case class Student(name: String)
val list: List[Student] = List(Student("abc"), Student("def"), Student("abc"))
import scala.collection.mutable.Map
val counter = (students: Map[String, Int], student: Student) => if (students.contains(student.name)) {
val ss = students(student.name)
students += (student.name -> (ss + 1))
} else students += (student.name -> 1)
val studentsWithCount: mutable.Map[String, Int] = list.foldLeft(Map.empty[String, Int]) { (students, student) =>
if(students.contains(student.name)) {
val ss = students(student.name)
students += (student.name -> (ss + 1))
} else students += (student.name -> 1)
}
studentsWithCount map println
//clean code with functions
val studentsCountWithFunction = list.foldLeft(Map.empty[String, Int])(counter)
studentsCountWithFunction map println
}