我正在使用以下代码
val maxEntries = myMap.values.max()?.let {
maxValue -> myMap.filterValues { it == maxValue }
} ?: emptyMap()
对于低于 100 但 100 及以上的值,它选择下一个最高值
地图:{0=65, 1=2, 2=100, 3=1, 4=11, 5=6, 6=46, 7=31}
最大值打印1:{0=65}
再比如:
地图:{0=3, 1=3, 2=3, 3=3, 4=7, 5=6}
最大值打印2:{4=7}
我也试过这种方式
val maxEntries = myMap.maxBy { it.value }?.value!!.toInt()
打印1:65
地图HashMap<String, String>
我想,你忘了说你的值是String
型,而不是Int
或Long
.这就是为什么它们被比作字符串(b > a
和b > abcgdf
,6 > 1
如此6 > 10
或6 > 1abcgfs
和65 > 100
(。当您想将字符串作为数字进行比较时,您需要将它们转换为数字或写入比较器。如果您确定这些字符串将始终是数字,只需使用
myMap.maxBy { it.value.toLong() }
// or for not very big numbers:
myMap.maxBy { it.value.toInt() }
或者,当您最后需要 Int 值时,也许您应该在此操作之前将字符串转换为数字。
如果你想找到最大值,无论是键还是值,它应该是:
myMap.maxBy { max(it.key.toInt(), it.value.toInt()) }