Kotlin中SortedMap按Pair值排序报错:类型不匹配问题排查
问题分析与解决方案
错误原因
toSortedMap方法的Comparator参数是用来比较Map的key的,而非整个键值对(Pair)。你定义了Comparator<Pair<String, Double>>,但方法实际会传入String类型的key(原Map的key为String),这就导致了类型不匹配的报错。
正确实现方式
SortedMap本身是基于key排序的数据结构,无法直接按value排序。要得到按value排序的有序Map,推荐将原Map的键值对排序后转成LinkedHashMap(它会保留插入顺序),具体代码如下:
方式一:通过Entry集合排序
val originalMap = mapOf("eat" to 11.0, "sleep" to 50.0) // 按value升序排序,降序替换为sortedByDescending val sortedByValueMap = originalMap.entries .sortedBy { it.value } .associate { it.key to it.value } as LinkedHashMap<String, Double>
方式二:转成Pair列表后排序
val originalMap = mapOf("eat" to 11.0, "sleep" to 50.0) val sortedByValueMap = originalMap.toList() .sortedBy { (_, value) -> value } // 解构Pair,忽略key,只取value排序 .toMap() as LinkedHashMap<String, Double>
注意事项
如果强行用SortedMap实现按value排序,会违背其基于key排序的设计逻辑,还可能出现相同value的key被覆盖的问题,因此不推荐这种做法。
内容的提问来源于stack exchange,提问作者xetra11
相关产品推荐
相关产品推荐

