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

Kotlin中查找Sugar类列表字段最大最小值的最高效方案是什么?

效率对比结论

  • 手动遍历的方案执行效率更高
    第一种调用内置API的方案累计要执行4次全列表遍历:minBy、maxBy每调用一次都会完整遍历一次列表,时间复杂度为O(4n);第二种手动遍历方案仅需1次全列表遍历就能算出所有极值,时间复杂度为O(n),常量开销仅为前者的1/4,列表元素量级越大,性能优势越明显。
  • 注意:你提供的手动遍历代码存在两个问题:
    1. Kotlin列表为0基索引,遍历范围写1..list.size会访问到list[list.size]这个不存在的下标,触发索引越界异常,正确遍历范围应为1 until list.size
    2. 如果列表为空,调用list.first()会直接抛出NoSuchElementException,需要提前做空列表判断

更优的高效实现方案

推荐使用Kotlin内置的fold函数实现单次遍历计算所有极值,既保留了手动遍历的高性能,又规避了手写循环的越界风险,代码更简洁易读,还天然兼容空列表场景:

// 先定义极值结果承载类
data class SugarExtrema(
    val minPrice: Double?,
    val maxPrice: Double?,
    val minWeight: Double?,
    val maxWeight: Double?
)

// 单次遍历计算所有极值
val extrema = list.fold(SugarExtrema(null, null, null, null)) { acc, sugar ->
    SugarExtrema(
        minPrice = minOf(acc.minPrice ?: Double.MAX_VALUE, sugar.price),
        maxPrice = maxOf(acc.maxPrice ?: Double.MIN_VALUE, sugar.price),
        minWeight = minOf(acc.minWeight ?: Double.MAX_VALUE, sugar.weight),
        maxWeight = maxOf(acc.maxWeight ?: Double.MIN_VALUE, sugar.weight)
    )
}

// 直接从extrema中取对应值即可,空列表会返回全null结果不会崩溃

该方案性能和正确修复后的手动遍历方案完全一致,不需要额外的遍历开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:03