MST
星途 面试题库

面试题:Kotlin集合分组与复杂排序

假设有一个Kotlin的数据类User,包含属性name(字符串类型)和age(整数类型)。现有一个User类型的MutableList,首先按照age对列表进行升序排序,如果age相同,则按照name的字典序进行排序。之后,按照age对排序后的列表进行分组,每个年龄组作为一个子列表,最后返回一个Map,其中键为年龄,值为对应年龄的用户列表。请实现这个功能,并解释在分组操作中groupBy函数的工作原理。
33.4万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
data class User(val name: String, val age: Int)

fun main() {
    val userList = mutableListOf(
        User("Alice", 25),
        User("Bob", 20),
        User("Charlie", 25),
        User("David", 22)
    )

    val sortedList = userList.sortedWith(compareBy(User::age, User::name))

    val result = sortedList.groupBy { it.age }

    result.forEach { (age, users) ->
        println("Age: $age, Users: $users")
    }
}

在分组操作中,groupBy 函数的工作原理如下:

  1. groupBy 函数接受一个Lambda表达式作为参数,该表达式定义了分组的依据。在上述代码中,{ it.age } 表示按照 User 对象的 age 属性进行分组。
  2. groupBy 函数遍历列表中的每个元素,并将每个元素传递给Lambda表达式。Lambda表达式返回一个值,这个值将作为分组的键。
  3. 对于每个键,groupBy 函数会创建一个新的列表,并将所有键值相同的元素添加到这个列表中。
  4. 最终,groupBy 函数返回一个 Map,其中键是分组的依据(如 age),值是包含所有具有相同键值的元素的列表。