Kotlin 如何按值对列表进行分组?

Kotlin 如何按值对列表进行分组?,kotlin,Kotlin,我有一个列表,我想创建一个包含特定id的所有值的对象 val list = listOf(A(id = 1), A(1), A(2), A(3), A(2)) 从这个列表中,我想创建一个新的Container类型的列表 data class Container( val id: Long // The id passed into A. val elementList: List<A> // The elements that contain the ID. ) 数据

我有一个列表,我想创建一个包含特定id的所有值的对象

val list = listOf(A(id = 1), A(1), A(2), A(3), A(2))
从这个列表中,我想创建一个新的
Container类型的列表

data class Container(
   val id: Long // The id passed into A.
   val elementList: List<A> // The elements that contain the ID.
)
数据类容器(
val id:Long//传递给A的id。
val elementList:列出//包含ID的元素。
)

我怎样才能在不去O(n^2)的情况下有效地完成这项工作

您可以使用
groupBy
+
map
groupBy
的实现是O(n),而
map
的实现是O(n),因此总运行时间是O(2n),也就是O(n)

list.groupBy{it.id}.map{(id,elementList)->容器(id,elementList)}

由于这是如此简短和易读,如果不是严格需要,我将避免进行进一步优化,但是,如果您需要进一步优化,您还可以减少空间成本,例如避免分配多个列表。

答案太棒了!非常感谢。