Вы можете сначала отсортировать список по убыванию точек, взять из него первых 5 игроков, а затем отсортировать их по индексу в исходном списке:
val topByPoints = SportGuysList.sortedByDescending { it.points }.take(5)
val result = topByPoints.sortedBy { SportGuysList.indexOf(it) }
Если SportGuysList
большое,тогда поиск индекса каждого результирующего элемента во время сортировки может занять много времени, поэтому вы можете запомнить исходный индекс каждого спортсмена рядом с ним:
val result =
SportGuysList.withIndex() // now we have pairs of value-index
.sortedByDescending { it.value.points } // sort by points
.take(5) // top 5
.sortedBy { it.index } // sort back by index
.map { it.value } // take only value from an each indexed pair
Попробуйте на игровой площадке Kotlin: https://pl.kotl.in/kMkpkIdEH