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