Все знают, что в 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]