標題可能措辭怪異或不清楚,但我正在使用 android studio 和 Kotlin 作為語言創建游戲。我有一個存盤庫可以檢索游戲的分數(也存盤它):
val readAllData: LiveData<List<ScoreDB>> = scoreDao.getScore()
然后在我的排行榜可組合功能中,我有:
val scoreList : LiveData<List<ScoreDB>> = vm.readAllData
我想過濾掉這個串列以顯示前 10 個分數。在將 scoreList 過濾為僅前十名的分數后,我將使用以下內容將其放入 lazyColumn 中:
//TODO List highest scores from database in this lazycolumn
items(10){idx->
ScoreRow(idx)
}
我被困在如何過濾 scoreList 以僅包含前 10 個分數,然后將它們顯示在惰性列中。謝謝您的幫助
uj5u.com熱心網友回復:
我想過濾掉這個串列以顯示前 10 個分數。
好的,所以你需要
- 一個串列
- 在排序串列中最高到最低,并
- 以采取的第一10:
所以:
val topTenScores = scoreList // The live data
.value // The actual list
.sortedByDescending { it.score } // The list sorted by ScoreDB.score
.take(10) // And filtering out the first 10
uj5u.com熱心網友回復:
您可以使用sortedByDescending()過濾串列,并使用take()獲取前 10 個元素。如果你想顯示它,你應該創建一個新的 LivaData 來存盤你的過濾串列:
val topTenScoreList : LiveData<List<ScoreDB>> =
Transformations.map(scoreList) {
it.sortedDescending{ s->s.score }.take(10)
}
并用于topTenScoreList生成列
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382591.html
