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

Kotlin的maxByOrNull返回非最大值问题及minByOrNull异常求助

Kotlin maxByOrNull/minByOrNull 字符串数字对比异常问题

测试场景与结果

  • 测试代码1:

    "6,9".split(",").maxByOrNull { it }?.toInt()
    

    返回结果:9,符合预期。

  • 测试代码2:

    "8,10".split(",").maxByOrNull { it }?.toInt()
    

    返回结果:8,不符合预期(预期应为10)。

问题规律

仅当对比位数相同的字符串形式数字时,maxByOrNull结果正常;当数字位数不同时,结果出错。另外测试发现minByOrNull会返回最大值,存在同样逻辑问题。

问题原因

maxByOrNull此处传入的it是字符串类型,对比时采用字符串字典序而非数字大小:

  • 字符串"8"和"10"对比时,字典序中"8"的首字符'8'的ASCII值大于"10"的首字符'1',因此被判定为更大。
  • 位数相同的字符串数字(如"6"和"9"、"10"和"11"),字典序与数字大小一致,所以结果正常。

解决方案

需先将字符串转换为数字,再进行大小对比:

"8,10".split(",").maxByOrNull { it.toInt() }

或使用maxOfOrNull直接处理数字集合:

"8,10".split(",").map { it.toInt() }.maxOfOrNull()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:17