条件必选最大内过滤器kotlin



我有一个列表,每个元素有以下字段:active: true/false, optional_id: Int?, name: String

我正在过滤具有活动true的字段,以获得最高的可选_id。

testList.filter { it.active == true }
.maxByOrNull { it.optional_id }
?. optional_id ?: 0

这个想法是,如果列表中有对象,字段活动为真,以获得其中最高的可选_id。否则,如果它们都为假(没有活动字段),则返回0。但由于optional_id是Int类型?,如果没有断言!!, maxbyyornull不会接受它。对于这种情况,还有其他方法来处理空断言吗?我不能更改optional_id的类型。

您可以使用maxOfWithOrNullnullsFirst比较器。

val highestOptionalId = testList.filter { it.active == true }
.maxOfWithOrNull(nullsFirst(naturalOrder())) { it.optionalId }
?: 0

"Of"建议返回选择器的值,而不是列表中的对象。"With"提示它使用Comparator

这是你要找的吗?

testList.filter { it.active && it.optional_id != null }
.maxByOrNull { it.optional_id!! } ?.optional_id 
?: 0

filter(...)之后,您可以安全地假设(看起来您没有并发性问题)optional_idmaxByOrNull中不为空。

相关内容

  • 没有找到相关文章

最新更新