Все знают, что в Kotlin есть массивы, списки, хэш-таблицы и другие коллекции. Однако не все знают о некоторых операторах, которые делают работу с такими коллекциями более удобной и эффективной. Сегодня рассмотрим наиболее интересные операторы при работе с коллекциями в Kotlin.
Drop
Drop удаляет первые n элементов из коллекции.
val numbers = listOf(1, 2, 3, 4, 5) val dropped = numbers.drop(2) // The dropped list now contains [3, 4, 5].
Filter
Filter вернёт список, который соответствует предикату. Есть еще FilterNot который инвертирует предикат.
val numbers = listOf(1, 2, 3, 4, 5)
val smallerThan3 = numbers.filter { n -> n < 3 }
// The resulting list has these numbers [1, 2].
Take
Take – противоположность функции drop. С помощью take можно оставить первые n элементов из коллекции.
val numbers = listOf(1, 2, 3, 4, 5) val first2 = numbers.take(2) // Берет первые 2 элемента. Теперь список такой [1, 2]
Any
Any возращает true если хоть один элемент коллекции соответсвует предикату.
val numbers = listOf(1, 2, 3, 4, 5)
val hasEvens = numbers.any { n -> n % 2 == 0 }
// Any вернет true - так как есть элементы в коллекции, которые
// делятся на 2 без остатка
All
All похож на Any, однако работает наоборот. Возвращает true, если все элементы коллекции соответствуют переданному предикату.
val numbers = listOf(1, 2, 3, 4, 5)
val allEven = numbers.all { n -> n % 2 == 0 }
// Результат будет false - так как в списке есть элементы, которые // не соответствуют предикату
Count
Count возвращает кол-во элементов, соответствующих предикату
val numbers = listOf(1, 2, 3, 4, 5)
val evenCount = numbers.count { n -> n % 2 == 0 }
// значение переменной evenCount = 2 потому что только 2 элементы
// подходят
GroupBy
groupBy группирует значения по некоторому критерию. Например, мы хотим разбить список пользователей по возрасту.
val users = listOf(User("Vasya", 50),User("Misha", 24), User("Rodion", 24))
println(users.groupBy { it.age })
// Результат {50=[User(name=Vasya, age=50)], 24=[User(name=Misha, age=24),User(name=Rodion, age=24)]}
AssociateBy
Эта функция похожа на groupBy, но не создает список со значениями в результирующей хэш-таблице, а возвращает сразу map
val numbers = listOf(1, 2, 3, 4, 5)
val groupped = numbers.associateBy { n -> n.toString() }
// Результат [“1”: 1, “2”:2, “3”:3, “4”:4, “5”:5]
