refactor: simplify function signatures for counting songs and retrieving top N songs
This commit is contained in:
parent
0c34a2df52
commit
3d52397ef8
@ -106,7 +106,7 @@ case class TopSongs(songs: List[Song] = List()) {
|
|||||||
// It uses flatMap to extract the artist names from the songs
|
// It uses flatMap to extract the artist names from the songs
|
||||||
// Then it groups the songs by artist name and counts the occurrences
|
// Then it groups the songs by artist name and counts the occurrences
|
||||||
// Finally, it returns a map with the artist names as keys and the counts as values
|
// Finally, it returns a map with the artist names as keys and the counts as values
|
||||||
def countSongsByArtist(songs: List[Song]): Map[String, Int] = {
|
def countSongsByArtist(): Map[String, Int] = {
|
||||||
songs.flatMap(_.singer.map(_.person.name))
|
songs.flatMap(_.singer.map(_.person.name))
|
||||||
.groupBy(identity)
|
.groupBy(identity)
|
||||||
.view.mapValues(_.size)
|
.view.mapValues(_.size)
|
||||||
@ -115,7 +115,7 @@ case class TopSongs(songs: List[Song] = List()) {
|
|||||||
|
|
||||||
// This function returns the top N songs by weeks on chart
|
// This function returns the top N songs by weeks on chart
|
||||||
// It sorts the songs by the streak value in descending order and takes the top N songs
|
// It sorts the songs by the streak value in descending order and takes the top N songs
|
||||||
def topNSongsByWeeks(songs: List[Song], n: Int): List[Song] = {
|
def topNSongsByWeeks(n: Int): List[Song] = {
|
||||||
songs.sortBy(song => -song.rank._1.streak.getOrElse(0)).take(n)
|
songs.sortBy(song => -song.rank._1.streak.getOrElse(0)).take(n)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,19 +156,20 @@ case class TopSongs(songs: List[Song] = List()) {
|
|||||||
// print the songs
|
// print the songs
|
||||||
topSongs.printSongs()
|
topSongs.printSongs()
|
||||||
|
|
||||||
println("----------");
|
println("----------")
|
||||||
|
|
||||||
// print the number of songs by artist
|
// print the number of songs by artist
|
||||||
val songsByArtist = topSongs.countSongsByArtist(topSongs.songs)
|
val songsByArtist = topSongs.countSongsByArtist()
|
||||||
println("Number of songs by artist:")
|
println("Number of songs by artist:")
|
||||||
songsByArtist.foreach {
|
songsByArtist.foreach {
|
||||||
case (artist, count) => println(s"$artist: $count")
|
case (artist, count) => println(s"$artist: $count")
|
||||||
}
|
}
|
||||||
|
|
||||||
println("----------");
|
println("----------");
|
||||||
|
println("----------")
|
||||||
|
|
||||||
// print the top N songs by weeks on chart
|
// print the top N songs by weeks on chart
|
||||||
val topNSongs = topSongs.topNSongsByWeeks(topSongs.songs, 5)
|
val topNSongs = topSongs.topNSongsByWeeks(5)
|
||||||
println("Top N songs by weeks on chart:")
|
println("Top N songs by weeks on chart:")
|
||||||
topNSongs.foreach { song =>
|
topNSongs.foreach { song =>
|
||||||
println(s"${song.title} by ${song.singer.map(_.person.name).mkString(", ")} - ${song.rank._1.streak.getOrElse(0)} weeks")
|
println(s"${song.title} by ${song.singer.map(_.person.name).mkString(", ")} - ${song.rank._1.streak.getOrElse(0)} weeks")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user