|    122  |    122  | 
|    123  |    123  | 
|    124 // (5) Implement a suggestions function which takes a rating |    124 // (5) Implement a suggestions function which takes a rating | 
|    125 // map and a movie_name as arguments. It calculates all the recommended |    125 // map and a movie_name as arguments. It calculates all the recommended | 
|    126 // movies sorted according to the most frequently suggested movie(s) first. |    126 // movies sorted according to the most frequently suggested movie(s) first. | 
|         |    127  | 
|         |    128 // needed in Scala 2.13. | 
|         |    129   | 
|         |    130 def mapValues[S, T, R](m: Map[S, T], f: T => R) = | 
|         |    131   m.map { case (x, y) => (x, f(y)) } | 
|         |    132  | 
|    127 def suggestions(recs: Map[String, List[String]],  |    133 def suggestions(recs: Map[String, List[String]],  | 
|    128                     mov_name: String) : List[String] = { |    134                     mov_name: String) : List[String] = { | 
|    129   val favs = favourites(recs, mov_name).flatten |    135   val favs = favourites(recs, mov_name).flatten | 
|    130   val favs_counted = favs.groupBy(identity).mapValues(_.size).toList |    136   val favs_counted = mapValues(favs.groupBy(identity), (v:List[String]) => v.size).toList | 
|    131   val favs_sorted = favs_counted.sortBy(_._2).reverse |    137   val favs_sorted = favs_counted.sortBy(_._2).reverse | 
|    132   favs_sorted.map(_._1) |    138   favs_sorted.map(_._1) | 
|    133 } |    139 } | 
|         |    140  | 
|         |    141 // check | 
|         |    142 // groupMap is equivalent to groupBy(key).mapValues(_.map(f)) | 
|    134  |    143  | 
|    135 // test cases |    144 // test cases | 
|    136  |    145  | 
|    137 //suggestions(ratings_map, "912") |    146 //suggestions(ratings_map, "912") | 
|    138 //suggestions(ratings_map, "912").length   |    147 //suggestions(ratings_map, "912").length   |