Как отсортировать список объектов на основе групп с наивысшим значением? - PullRequest
0 голосов
/ 09 мая 2018

Если у меня есть список объектов, как мне отсортировать их по наибольшей группе?

например. Я прочитал этот CSV в список объектов

FirstName, LastName, Age
Michael, Moore, 64
John, Doe, 22
John, Brown, 44
Peter, Piper, 46
John, Johnson, 14
Peter, Rabbit, 5

Если я группирую по FirstName, я получаю

FirstName, Count
Michael, 1
John, 3
Peter, 2

Если сортировать по убыванию по количеству, я получаю

FirstName, Count
John, 3
Peter, 2
Michael, 1

Как мне теперь отсортировать первый список по порядку этой отсортированной группы?

FirstName, LastName, Age
John, Doe, 22
John, Brown, 44
John, Johnson, 14
Peter, Piper, 46
Peter, Rabbit, 5
Michael, Moore, 64

Пока у меня есть:

val people: List<Person> = readNames(csv)
val group = positions.groupingBy { it.firstName }.eachCount()
val sorted = group.toList().sortedByDescending { (key, value) -> value }

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Создайте свою eachCount карту, которая содержит каждое имя с соответствующим количеством случаев. Затем отсортируйте исходный массив по заранее определенным подсчетам:

val sorted = ps.groupingBy { it.fn }.eachCount().let { counts ->
    ps.sortedByDescending { counts[it.fn] }
}
0 голосов
/ 10 мая 2018

После группировки имя стало ключевым для важности этого имени в отсортированном списке.

people.sortedByDescending { group[it.firstName] }

Вы также можете отсортировать список людей по частоте появления имени, хотя операция будет более тяжелой, поскольку подсчет выполняется для каждого элемента, а не для всех сразу через вашу группу.

people.sortedByDescending { person -> people.count { it.firstName == person.firstName } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...