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

Kotlin中获取Int类型ArrayList的最大值

解决Kotlin集合max()返回可空类型的更优方案

嘿,这个问题我之前也碰到过!既然你明确知道你的amplititudes集合是有元素的(手动添加了7个Int值),那有几个比单纯用?.更优雅的方案,既能避免冗余的空安全处理,又能保证代码的安全性:

方案1:使用requireNotNull()强制解包(推荐)

这个方法会在值为null时抛出带自定义信息的异常,非常适合你这种100%确定集合非空的场景——既符合fail-fast的编程原则,又能让代码意图更清晰:

var amplititudes: ArrayList<Int> = ArrayList()
amplititudes.add(1)
amplititudes.add(2)
amplititudes.add(3)
amplititudes.add(4)
amplititudes.add(3)
amplititudes.add(2)
amplititudes.add(1)

val maxAmplitude = requireNotNull(amplititudes.max()) { "振幅集合不能为空,无法获取最大值" }
// 此时maxAmplitude的类型是Int,而非Int?

如果未来代码不小心导致集合为空,这个方法会立刻抛出异常,帮你快速定位问题,比默默使用!!强制解包更安全。

方案2:结合!!强制解包(不推荐,除非绝对确定)

如果你完全确信集合不可能为空,也可以直接用!!强制解包,但这种方式风险较高——一旦集合意外为空,会直接抛出空指针异常,不利于调试:

val maxAmplitude = amplititudes.max()!!

只建议在你能保证集合永远非空的极端场景下使用。

方案3:自定义非空集合类型(进阶)

如果你经常需要处理这类确定非空的集合,可以利用Kotlin的类型系统,将集合标记为非空类型(需要Kotlin 1.3+):

import kotlin.collections.NotEmptyCollection

val nonEmptyAmplitudes = amplititudes as Collection<Int> & NotEmptyCollection
val maxAmplitude = nonEmptyAmplitudes.max() // 此时max()返回的是Int,而非Int?

不过这种方式稍显繁琐,适合在大型项目中统一规范非空集合的场景。

额外提示:如果集合可能为空的场景

如果未来你的集合存在为空的可能性,那更优雅的方式是结合空合并运算符?:设置默认值,比如:

val maxAmplitude = amplititudes.max() ?: 0 // 当集合为空时返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:28