我将Java文件转换为Kotlin。而且我修复了大多数问题。但是,我无法使用Comparator
来理解这一部分。
wordItems.sortWith(Comparator { (_, word), (_, word) ->
val size1 = word!!.length
val size2 = word.length
if (size1 < size2) {
return@Collections.sort - 1
} else if (size1 == size2) {
return@Collections.sort 0
} else {
return@Collections.sort 1
}
})
还有一个我也不明白。
Collections.sort(wordItems) { (_, word), (_, word) ->
val size1 = word!!.length
val size2 = word.length
if (size1 < size2) {
return@Collections.sort - 1
} else if (size1 == size2) {
return@Collections.sort 0
} else {
return@Collections.sort 1
}
}
如何更改它以使其正常工作?
答案 0 :(得分:2)
Comparator
是Java中的SAM(单一抽象方法)接口。可以使用SAM转换技术在Kotlin中实例化此类接口的实现,因此无需编写实现Comparator
的匿名对象,如下所示:
val comparator = object : Comparator<WordItem> {
override fun compare(item1: WordItem, item2: WordItem): Int {
val size1 = item1.word.length
val size2 = item2.word.length
...
}
}
你可以写
val comparator = Comparator<WordItem> { item1, item2 ->
val size1 = item1.word.length
val size2 = item2.word.length
...
}
在这里,我假设每个WordItem
都具有word
属性。
似乎您正在按字长比较项目。在这种情况下,您可以使用compareBy
函数进一步简化此类比较器:
wordItems.sortWith(compareBy { it.word.length })
或sortBy
函数
wordItems.sortBy { it.word.length }