Функция distinctBy
Функция distinctBy возвращает коллекцию, содержащую только элементы
с уникальными ключами. Ключ для каждого элемента вычисляется с помощью
функции-селектора, которая передается в качестве параметра. Если несколько
элементов имеют одинаковый ключ, то в результирующую коллекцию попадет
только первый из них. Функция работает с массивами Array, списками
List, множествами Set и другими типами коллекций.
Импорт
kotlinimport kotlin.collections.distinctBy
Синтаксис
kotlin// Для Iterable
inline fun <T, K> Iterable<T>.distinctBy(
selector: (T) -> K
): List<T>
kotlin// Для Array
inline fun <T, K> Array<out T>.distinctBy(
selector: (T) -> K
): List<T>
Пример
Получим уникальные элементы списка строк по длине строки:
kotlinval list = listOf("apple", "banana", "cherry", "date", "elderberry")
val res = list.distinctBy { it.length }
println(res)
Результат выполнения кода:
kotlinList<String> ["apple", "banana", "date"]
Пример
Получим уникальные элементы массива чисел по первой цифре:
kotlinval array = arrayOf(123, 456, 789, 135, 246, 357)
val res = array.distinctBy { it.toString().first() }
println(res)
Результат выполнения кода:
kotlinList<Int> [123, 456, 789]
Пример
Получим уникальные элементы множества по четности числа:
kotlinval set = setOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val res = set.distinctBy { it % 2 == 0 }
println(res)
Результат выполнения кода:
kotlinList<Int> [1, 2]
Пример
Получим уникальные элементы списка объектов по свойству класса:
kotlindata class Person(val name: String, val age: Int)
val people = listOf(
Person("Alice", 25),
Person("Bob", 30),
Person("Charlie", 25),
Person("David", 30)
)
val res = people.distinctBy { it.age }
println(res)
Результат выполнения кода:
kotlinList<Person> [Person(name=Alice, age=25), Person(name=Bob, age=30)]