我想根據學生的受歡迎程度對學生串列進行排序(此串列始終按他們的分數排序),然后按字母順序對不在該串列中的學生進行排序
- 這兩個串列如下所示:
students = listOf<Student>(
Student(id = 3, name ="mike"),
Student(id = 2,name ="mathew"),
Student(id = 1,name ="john"),
Student(id = 4,name ="alan")
)
val popularity = listOf<Ranking>(
Ranking(id= 2, points = 30),
Ranking(id= 3, points = 15)
)
- 我正在尋找的結果是:
[
Student(id=2,name"mathew"), <- first, because of popularity
Student(id=3,name="mike"),
Student(id=4,name="alan"), <- starting here by alphabetical order
Student(id=1,name="john")
]
如果有人知道這樣做的有效方法,我將不勝感激
uj5u.com熱心網友回復:
將排名作為串列是次優的,因為要查找內容,您需要每次都瀏覽串列,如果您有很多排名,這會很慢。如果您確實有很多,我建議您先將它們作為地圖。您可以使用 . 從串列中輕松完成associate。
然后,您可以創建一個自定義比較器來按受歡迎程度然后按名稱進行比較,并在以下位置使用它sortedWith:
val studentIdToPopularity = popularity.associate { it.id to it.points }
val studentComparator = compareByDescending<Student> { studentIdToPopularity[it.id] ?: 0 }.thenBy { it.name }
val sortedStudents = students.sortedWith(studentComparator)
你可以在這里看到結果:https ://pl.kotl.in/a1GZ736jZ
Student(id=2, name=mathew)
Student(id=3, name=mike)
Student(id=4, name=alan)
Student(id=1, name=john)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/526769.html
標籤:科特林
