我從請求資訊中接收資料作為代碼下方的串列資料(串列)。該資料有一個“關鍵”引數,我想通過它對其進行排序。
data class ApplianceSetting(
@SerializedName("key") val key: String,
@SerializedName("value") var value: Any,
(...)
我在SettingsUtilEnum中有所需的順序,并希望以此對專案進行排序。
之后,我可以使用 map{}資料轉換串列并使用 Enum getSettingByMode() 函式并獲取 Enum 值串列。然后我將對它們進行排序并再次將它們轉換為串列。但這聽起來太低效了。有沒有更好的辦法。
enum class SettingsUtilEnum(
var settingKey: String,
override val order: Int = 99,
var settingName: String = "",
) : AbstractOrderEnum {
FIRST_MODE("first.mode", 0),
SECOND_MODE("second.mode", 1),
(...)
UNKNOWN_MODE("", 99);
companion object {
@JvmStatic
fun getSettingByMode(settingKey: String): SettingsUtilEnum? {
return values().find { it.settingKey == settingKey }
}
?
private fun initDataObserver() {
(activity as FavouriteActivity).viewModel.applianceSettings.observe(activity as FavouriteActivity
) { data ->
(controlRecyclerView.adapter as FavouriteAdditionalControlsAdapter)
val adapter = (controlRecyclerView.adapter as FavouriteAdditionalControlsAdapter)
// public final var data: List<ApplianceSetting>
// old code:
// data.settings
adapter.data = sortAndGetControlModes(data)
adapter.notifyDataSetChanged()
}
}
// TODO: sortAndGetControlModes
private fun sortAndGetControlModes(data: ApplianceSettingsList) =
data.settings.map {
getSettingByMode(it.key)
?: UNKNOWN_MODE.apply {
// If in future new modes are added -> put them as tail
settingKey = it.key
}
}.sortedBy { it.order }
// error i need to return again List<ApplianceSetting>

uj5u.com熱心網友回復:
如果您想將鍵與它們的 ASCII 值進行比較,您可以使用sortBy { it.key }
如果您想擴大比較的可能性,您可以使用sortedWith帶有自定義comparator作為引數的函式。
比較器用于比較其兩個引數的順序。如果引數相等,則回傳零;如果第一個引數小于第二個引數,則回傳負數;如果第一個引數大于第二個引數,則回傳正數。
示例:
如果要按key引數的整數值排序,可以這樣使用:
data.settings.sortedWith { a, b ->
when {
a.key.toInt() < b.key.toInt() -> -1
a.key.toInt() > b.key.toInt() -> 1
else -> 0
}
}
uj5u.com熱心網友回復:
我使用 sortedBy 修復它,作為比較器,我使用從 getSettingByMode() 接收到的值(訂單),如果找不到專案(空),我給他訂單值 99 并將其放在尾部位置:
private fun sortAndGetControlModes(data: ApplianceSettingsList) =
data.settings.sortedBy {
getSettingByMode(it.key)?.order ?:99
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471922.html
上一篇:按鍵值排序物件0按數字大小
