Сортировка списка и получение элементов - PullRequest
0 голосов
/ 07 октября 2019

У меня есть класс:

class SportMan(
   val name: String,
   val points: Double,
}

и список с именем SportGuysList из Sportman объектов. Я хочу создать новый список из SportGuysList, который имеет 5 Sportman объектов

1 Ответ

2 голосов
/ 07 октября 2019

Вы можете сначала отсортировать список по убыванию точек, взять из него первых 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...