簡體   English   中英

從Java比較器轉換后的Kotlin比較器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM