You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin filter内取条件最大值时如何处理Int?类型避免非空断言

解决方案

有两种常用实现方式,都可以避免使用非空断言,不需要修改optional_id的原有可空类型,你可以根据业务逻辑选择:

方案1:保留空ID参与计算,空值视为最小值

如果要求active为true的元素即使optional_id为空也要纳入计算逻辑,仅当所有active为true的元素的optional_id全为空时返回0,可以用maxOfOrNull搭配空值默认值实现:

val maxId = testList
    .filter { it.active }
    .maxOfOrNull { it.optional_id ?: Int.MIN_VALUE }
    ?.takeIf { it != Int.MIN_VALUE } 
    ?: 0

逻辑说明:

  • 用it.optional_id ?: Int.MIN_VALUE将空ID映射为Int最小值,避免空值比较问题
  • 若所有active为true的元素ID全为空,maxOfOrNull会返回Int.MIN_VALUE,通过takeIf转为null后最终返回0

方案2:直接过滤空ID

如果业务逻辑允许忽略active为true但optional_id为空的元素,推荐用更简洁的mapNotNull实现:

val maxId = testList
    .filter { it.active }
    .mapNotNull { it.optional_id }
    .maxOrNull() 
    ?: 0

逻辑说明:

  • mapNotNull会直接丢弃optional_id为空的元素,剩下的都是非空Int类型
  • 过滤后如果集合为空,maxOrNull返回null,最终走默认值0的逻辑

内容的提问来源于stack exchange,提问作者Leyla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:06:04