Kotlin sort array por valor en range

Tengamos un class Player(val position: Int, val time: Float) y queremos orderar una matriz o list de players por position . Si algunos de estos players tienen la misma position después de la primera sorting, queremos orderarlos por time en grupos. Por grupo me refiero a un set de players con la misma position.

Se acerca de

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

Pero, por supuesto, no resuelve este caso.

¿Hay alguna manera inteligente en Kotlin para lograr esta simple tarea? Podemos orderarlo manualmente verificando posiciones e intercambiando elementos, pero me pregunto si Kotlin tiene algo que decir en este caso.

    Primero puede orderar por position y time y luego agrupar por time con la funcionalidad estándar de Kotlin.

    Ejemplo

     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 } 

    Descripción

    1. orderar la Array según la position y el time sortedWith con sortedWith + compareBy
    2. agruparlo por position del Player

    Resultado

    El resultado es un Map<Int,List<Player> , que en el ejemplo se ve así:

      { 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)] }