Селектор sortBy () не сортирует список - PullRequest
0 голосов
/ 02 марта 2019

У меня есть оператор sortedBy{}, который намеревается отсортировать List по длине элементов String:

var animals: List<String> = listOf("tiger", "cat", "dragon", "elephant")
fun strLength(it: String) = it.length
animals.sortedBy { strLength(it) }
animals.forEach {println(it)}

Однако он печатает только начальный порядок.Есть идеи почему?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

sortedBy не сортирует список, а возвращает новый список, в котором отсортированы элементы.Если вы не хотите новый список, просто используйте sortBy.

0 голосов
/ 02 марта 2019

Вы должны назначить вывод sortedBy.

  animals = animals.sortedBy { strLength(it) }

Потому что, как и многие другие функции в Kotlin, sortedBy не изменяет входные данные и учитывает неизменность.Так что возвращается новая коллекция.Так что это смягчает побочные эффекты.Котлин поощряет этот неизменный подход.Однако при необходимости существуют изменяемые аналоги этих коллекций.

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