首页 > 解决方案 > 过滤器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 的类型。

标签: kotlin

解决方案


您可以maxOfWithOrNullnullsFirst比较器一起使用。

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

“Of”表示它返回选择器的值,而不是列表中的对象。“With”表示它使用Comparator.


推荐阅读