Функция distinct
Функция distinct создает новую коллекцию,
содержащую только уникальные элементы из исходной.
Все дубликаты удаляются. Функция сохраняет порядок
первого вхождения каждого элемента.
Работает с коллекциями, содержащими элементы,
которые реализуют интерфейс equals для сравнения.
Синтаксис
fun <T> Array<out T>.distinct(): List<T>
fun <T> Iterable<T>.distinct(): List<T>
Пример
Получим уникальные элементы из списка чисел:
val numbers = listOf(1, 2, 3, 2, 1, 4, 5, 3)
val res = numbers.distinct()
println(res)
Результат выполнения кода:
List<Int> [1, 2, 3, 4, 5]
Пример
Получим уникальные элементы из массива символов:
val chars = arrayOf('a', 'b', 'c', 'a', 'd', 'b')
val res = chars.distinct()
println(res)
Результат выполнения кода:
List<Char> ['a', 'b', 'c', 'd']
Пример
Получим уникальные строки из списка:
val strings = listOf("abc", "def", "abc", "ghi", "def")
val res = strings.distinct()
println(res)
Результат выполнения кода:
List<String> ["abc", "def", "ghi"]
Для каких типов коллекций работает
Функция distinct работает со следующими типами коллекций:
Array- массивы любых типовList- списки (List,MutableList)Set- множества (Set,MutableSet), хотя для множеств это избыточноIterable- любые итерируемые коллекции
Не работает с:
Map- для карт используйтеdistinctнаkeysилиvalues
Пример с Set
Применение distinct к множеству:
val set = setOf(1, 2, 3, 2, 1)
val res = set.distinct()
println(res)
Результат выполнения кода:
List<Int> [1, 2, 3]
Пример с Map
Для карты можно применить distinct к ключам или значениям:
val map = mapOf("a" to 1, "b" to 2, "c" to 1, "d" to 3)
val uniqueValues = map.values.distinct()
println(uniqueValues)
Результат выполнения кода:
List<Int> [1, 2, 3]
Смотрите также
-
функцию
distinctBy,
которая позволяет задать критерий уникальности -
функцию
toSet,
которая преобразует коллекцию в множество -
функцию
union,
которая объединяет две коллекции без дубликатов -
функцию
filter,
которая фильтрует элементы по условию