小编Jue*_*ang的帖子

在Kotlin中将比较器转换为lambda

我的Kotlin代码中有一个代码片段:

val dataMap = sensoryDataUsage.groupBy { it }
        .mapValues { it.value.count().toDouble()/count }
        .mapKeys { println(it.key); it.key.toDouble()/max }
        .toSortedMap(object : Comparator<Double> {
            override fun compare(p0: Double, p1: Double): Int {
                return (p1-p0).compareTo(0)
            }
        })
Run Code Online (Sandbox Code Playgroud)

它运作得很好.但是IDE一直建议我将Comparator对象转换为lambda,我就这样做了:

val dataMap = sensoryDataUsage.groupBy { it }
        .mapValues { it.value.count().toDouble()/count }
        .mapKeys { println(it.key); it.key.toDouble()/max }
        .toSortedMap {x, y -> (y-x).compareTo(0)}
Run Code Online (Sandbox Code Playgroud)

这个工作很糟糕.但是,它无法编译:

Error:(32, 14) Kotlin: Type inference failed: fun <K, V> Map<out K, V>.toSortedMap(comparator: Comparator<in K>): SortedMap<K, V> cannot be applied to receiver: Map<Double, Double>  arguments: …
Run Code Online (Sandbox Code Playgroud)

lambda kotlin

6
推荐指数
1
解决办法
2253
查看次数

标签 统计

kotlin ×1

lambda ×1