如果我有一个对象列表,我该如何根据最大的组对它们进行排序?
e.g。我把这个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 }
答案 0 :(得分:0)
分组后,名字已成为该名称在排序列表中重要性的关键。
?- bagof(F2,N^(N in 0..3, friend_of_maxdist(a,F2,N), label([N])),L).
L = [b, b, b, b2, b2, b2, b3, b3, b3|...].
您还可以按名字出现的频率对人员列表进行排序,但操作会更重,因为对每个项目执行计数而不是一次性通过分组进行计数。
people.sortedByDescending { group[it.firstName] }
答案 1 :(得分:0)
创建您的eachCount
地图,其中包含每个具有相关出现次数的名称。然后按原先确定的计数对原始数组进行排序:
val sorted = ps.groupingBy { it.fn }.eachCount().let { counts ->
ps.sortedByDescending { counts[it.fn] }
}