Возможно, вместо использования sortWith
и thenBy
, вы могли бы воспользоваться другой функцией расширения в Collections
, которая называется partition
.
Эта функция принимает предикат и создает Pair<List<T>, List<T>>
, где первый список содержит элементы, которые соответствуют предикату, а второй список - все остальные элементы.
Давайте рассмотрим пример:
val cities = ["Berlin", "London", "Paris", "Rome", "Budapest", "Barcelona"]
// Here we apply a predicate to create the first partition
val searchQuery = "B"
val (matchingElements, nonMatchingElements)
= cities.partition { it == searchQuery } //([], ["Berlin", "London", "Paris", "Rome", "Budapest", "Barcelona"]
// Now potentially we could create another partition from the nonMatchingElements list
val (startingWithQuery, others) = nonMatchingElements
.partition { it.startsWith(searchQuery) }
println(matchingElements) // []
println(startingWithQuery) // ["Berlin", "Budapest", "Barcelona"]
println(others) // ["London", "Paris", "Rome"]
После создания всех необходимых вам разделов вы можете теперь генерировать список из всех необходимых вам разделов в правильном порядке или показывать эти разные списки с некоторым разделителем.