flatMap, groupBy

data class Student(val name: String, val subjects: List<String>)

val students = listOf(
    Student("Kim", listOf("Math", "English")),
    Student("Lee", listOf("English", "Science"))
)

val subjectToStudents = students
    .flatMap { student -> student.subjects.map { subject -> subject to student.name } }
    .groupBy({ it.first }, { it.second })

println(subjectToStudents)
/*
{
  Math=[Kim],
  English=[Kim, Lee],
  Science=[Lee]
}
*/