Функция 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)]

Смотрите также

  • функцию distinct,
    которая возвращает уникальные элементы без преобразования
  • функцию groupBy,
    которая группирует элементы по ключу
  • функцию map,
    которая преобразует элементы коллекции
  • функцию filter,
    которая фильтрует элементы по условию