[英]Kotlin Comparator after converting from Java Comparator
我將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
}
}
我該如何更改才能使其正常工作?
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 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.