Có một snipt mã trong mã Kotlin tôi:convert so sánh để lambda trong 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)
}
})
Nó chỉ làm việc tốt. Tuy nhiên, IDE tiếp tục đề nghị tôi chuyển đổi đối tượng Comparator đó thành một lambda và tôi đã làm điều đó:
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)}
Công việc này được làm sáng tỏ. Tuy nhiên, nó không thể được biên dịch:
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: ((Double, Double) -> Int)
Bất kỳ ý tưởng gì đã xảy ra? Cảm ơn trước.
Bạn đã chuyển đổi nó bằng tay hoặc áp dụng một ý định cung cấp bởi IDE? – Ilya