Kotlin Comparator после конвертации из Java Comparator - PullRequest
0 голосов
/ 26 июня 2019

Я конвертировал мои файлы 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
    }
}

Как я могу изменить это, чтобы оно работало?

1 Ответ

2 голосов
/ 27 июня 2019

Comparator - это интерфейс SAM (единственный абстрактный метод) в Java.Реализация такого интерфейса может быть реализована в Kotlin с использованием техники SAM-преобразования, поэтому вместо написания анонимного объекта, реализующего 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 function

wordItems.sortBy { it.word.length }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...