Изменить положение элементов списка с некоторыми условиями - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть список таких строк: -

listOf("abc", "a", "bb", "aa", "aaa", "bb", "a")

Я хочу вывод, подобный этому: -

listOf("a", "a", "aa", "bb", "bb", "aaa", "abc")

Сначала я хочу отсортировать список по длине, а затем сноваотсортировать группу длины по буквам.

Пока что я пробовал код ниже

fun main() {
    val result = listOf("abc", "a", "bb", "aa", "aaa", "bb", "a").groupBy { it.length }
    val valueList = ArrayList(result.values).flatMap { it.toList() }
    println(valueList)
}

Но полученный результат выглядит примерно так:

[abc, aaa, a, a, bb, aa, bb]

После дублирования @Sergey LagutinКомментарий Я также попробовал

val sortedList = a.sortedWith(compareBy { it.length })

Что не возвращает желаемый результат

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019
val a = listOf("abc", "a", "bb", "aa", "aaa", "bb", "a")
a.sortedWith(compareBy({ it.length }, { it })) // [a, a, aa, bb, bb, aaa, abc]
0 голосов
/ 06 февраля 2019

Вы можете попробовать этот способ

val yourList = listOf("abc", "a", "bb", "aa", "aaa", "bb", "a")
val yourSortedList = yourList.sorted().sortedBy { it.length }
  • отсортировано отсортирует ваш список в соответствии с их естественным порядком сортировки.В этом случае это будет алфавитный порядок.
  • С sortyBy вы точно указываете, что порядок сортировки - это длина вашей строки.

Результат [a, a, aa, bb, bb, aaa, abc]

0 голосов
/ 06 февраля 2019

Использование функции sortedWith в коллекции

val a = listOf("abc", "a", "bb", "aa", "aaa", "bb", "a")
val b = a.sortedWith(compareBy({ it.length }, { it }))
println(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...