我有一個串列,每個元素都有以下欄位:active: true/false, optional_id: Int?, name: String
我正在過濾具有活動 true 的欄位,以獲得最高的 optional_id。
testList.filter { it.active == true }
.maxByOrNull { it.optional_id }
?. optional_id ?: 0
這個想法是,如果串列中有物件,并且欄位 active 為 true,則在這些物件中獲得最高的 optional_id。否則,如果它們都為 false(無活動欄位),則回傳 0。但由于 optional_id 是 Int? 型別,maxByOrNull 不接受它而不宣告!!。有沒有其他方法可以處理這種情況下的空斷言?我無法更改 optional_id 的型別。
uj5u.com熱心網友回復:
您可以maxOfWithOrNull與nullsFirst比較器一起使用。
val highestOptionalId = testList.filter { it.active == true }
.maxOfWithOrNull(nullsFirst(naturalOrder())) { it.optionalId }
?: 0
“Of”表示它回傳選擇器的值,而不是串列中的物件。“With”表示它使用Comparator.
uj5u.com熱心網友回復:
您可以執行以下操作(使用 Java MIN_VALUEInteger作為null值的后備):
list2.filter { it.active }
.maxByOrNull { it.optional_id ?: MIN_VALUE }
?. optional_id ?: 0
uj5u.com熱心網友回復:
這是你想要的?
testList.filter { it.active && it.optional_id != null }
.maxByOrNull { it.optional_id!! } ?.optional_id
?: 0
由于過濾器,您可以安全地假設(看起來您沒有并發問題)optional_id在maxByOrNull.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/331765.html
標籤:科特林
上一篇:限制sqlite中列的值
