Kotlin按值排序数组

让我们有一个class Player(val position: Int, val time: Float) ,我们要排序的arrays或players列表的position 。 如果这些players中的一些在排序后有相同的position ,我们希望按time分组。 我的意思是一组players的位置相同。

我知道

list.sortedWith(compareBy { it.a }.thenByDescending { it.b }.thenBy { it.c })

但当然这并不能解决这个问题。

Kotlin有没有什么聪明的方法来完成这个简单的任务? 我们可以通过检查位置和交换项目来手动排序,但是我想知道在这种情况下Kotlin是否有话要说。

您可以先按positiontime排序,然后按标准Kotlinfunction分组。

 data class Player(val position: Int, val time: Float) val p1 = Player(1, 10f) val plys = arrayOf(p1, p1.copy(position = 3), p1.copy(time = 0f), p1.copy(time = 20f), p1.copy(position = 2), p1.copy(position = 2, time = 20f)) val groupBy = plys.sortedWith(compareBy(Player::position, Player::time)) .groupBy { it.position } 

描述

  1. 按照PlayerpositiontimesortedWith + compareByArray进行排序
  2. Playerposition分组

结果

结果是一个Map ,在这个例子中看起来像这样:

  { 1=[Player(position=1, time=0.0), Player(position=1, time=10.0), Player(position=1, time=20.0)], 2=[Player(position=2, time=10.0), Player(position=2, time=20.0)], 3=[Player(position=3, time=10.0)] }