kotlin - 过滤器kotlin内的条件最大值
问题描述
我有一个列表,每个元素都包含以下字段:active:true/false,optional_id:Int?,name:String
我正在过滤具有活动 true 的字段,以获得最高的 optional_id。
testList.filter { it.active == true }
.maxByOrNull { it.optional_id }
?. optional_id ?: 0
这个想法是,如果列表中有对象,并且字段为 true,则获取其中最高的 optional_id。否则,如果它们都为假(无活动字段),则返回 0。但由于 optional_id 是 Int? 类型,maxByOrNull 不接受它而不断言!!
。有没有其他方法来处理这种情况下的空断言?我无法更改 optional_id 的类型。
解决方案
您可以maxOfWithOrNull
与nullsFirst
比较器一起使用。
val highestOptionalId = testList.filter { it.active == true }
.maxOfWithOrNull(nullsFirst(naturalOrder())) { it.optionalId }
?: 0
“Of”表示它返回选择器的值,而不是列表中的对象。“With”表示它使用Comparator
.