- Выбор одного элемента
- Получение элемента по его позиции
- Получение элемента по условию
- Получение элемента с помощью селектора
- Получение случайного элемента
- Проверка на наличие элемента
- Kotlin list contains any
- List
- Parameters
- Properties
- size
- Functions
- contains
- containsAll
- get
- indexOf
- isEmpty
- iterator
- lastIndexOf
- listIterator
- subList
- Extension Properties
- indices
- lastIndex
- Extension Functions
- all
- any
- asIterable
- asReversed
- asSequence
- associate
- associateBy
- associateByTo
- associateTo
- associateWith
- associateWithTo
- binarySearch
Выбор одного элемента
В Kotlin существует набор функций для извлечения отдельных элементов из коллекции. Функции, описанные в этом разделе, применимы как к спискам, так и к множествам ( Set ).
В определении списка сказано, что список — это упорядоченная коллекция. Следовательно, каждый элемент списка имеет свою позицию, которую вы можете использовать в качестве ссылки на этот элемент. В дополнение к функциям, описанным в этом разделе, списки предлагают более широкий набор способов извлечения и поиска элементов по индексам. Для получения дополнительной информации см. List: специфичные операции.
В свою очередь множество не является упорядоченной коллекцией по определению. Однако в Kotlin Set хранит элементы в определённом порядке. Это может быть порядок вставки (как в LinkedHashSet ), естественный порядок сортировки (как в SortedSet ) или какой-либо другой порядок. Но также порядок может быть и неизвестен. В таком случае элементы всё равно каким-то образом упорядочены, поэтому функции, которые полагаются на позиции элементов, по-прежнему возвращают свои результаты. Однако такие результаты непредсказуемы для конечного пользователя, если он не знает, какую из реализаций использует Set .
Получение элемента по его позиции
Для получения элемента в определённой позиции существует функция elementAt() . При вызове передайте ей целое число в качестве аргумента и она вернёт вам элемент коллекции, который находится в данной позиции. У первого элемента позиция равна 0 , а у последнего — (size — 1) .
Функция elementAt() полезна для использования с коллекциями, которые не предоставляют индексированный доступ. При работе с List более идиоматично использовать оператор доступа по индексу ( get() или [] ).
Также существуют полезные функции для получения первого и последнего элемента коллекции: first() и last() .
Чтобы избежать исключений при обращении к несуществующим в коллекции элементам, используйте безопасные варианты функции elementAt() :
- elementAtOrNull() — возвращает null , если указанная позиция выходит за границы коллекции.
- elementAtOrElse() — дополнительно принимает лямбда-функцию. Когда происходит вызов с позицией, которая выходит за границы коллекции, elementAtOrElse() возвращает результат выполнения лямбды.
fun main() < val numbers = listOf("one", "two", "three", "four", "five") println(numbers.elementAtOrNull(5)) // null println(numbers.elementAtOrElse(5) < index ->"The value for index $index is undefined">) // The value for index 5 is undefined >
Получение элемента по условию
Функции first() и last() позволяют искать в коллекции элементы, соответствующие заданному предикату. При вызове функции first() с предикатом, вы получите первый элемент, для которого предикат возвращает true . В свою очередь функция last() с предикатом вернёт последний элемент, соответствующий предикату.
fun main() < val numbers = listOf("one", "two", "three", "four", "five", "six") println(numbers.first < it.length >3 >) // three println(numbers.last < it.startsWith("f") >) // five >
Если ни один элемент не соответствует предикату, обе функции выбросят исключение. Чтобы этого избежать, используйте firstOrNull() и lastOrNull() : эти функции вернут null , если элементы не найдены.
Также вы можете использовать нижеперечисленные функции, если их имена лучше подходят для вашей ситуации:
fun main() < val numbers = listOf(1, 2, 3, 4) println(numbers.find < it % 2 == 0 >) // 2 println(numbers.findLast < it % 2 == 0 >) // 4 >
Получение элемента с помощью селектора
Если перед извлечением элемента вы хотите его преобразовать, то используйте функцию firstNotNullOf() . Она сочетает в себе два действия:
- Преобразует коллекцию с помощью функции селектора.
- Возвращает первое значение, не равное null .
Функция firstNotNullOf() бросает исключение NoSuchElementException , если не было найдено значения, отличного от null . Чтобы этого избежать, используйте функцию firstNotNullOfOrNull() , которая в этом случае вернёт null .
fun main() < val list = listOf(0, "true", false) // Преобразует каждый элемент в строку и возвращает первый элемент с нужной длиной. val longEnough = list.firstNotNullOf < item ->item.toString().takeIf < it.length >= 4 > > println(longEnough) // true >
Получение случайного элемента
Функция random() позволяет получить произвольный элемент коллекции. Её можно вызывать без аргументов, либо с объектом Random .
Если коллекция пуста, то функция random() выбросит исключение. Чтобы вместо исключения получать null , используйте randomOrNull() .
Проверка на наличие элемента
Чтобы проверить есть ли в коллекции определённый элемент, используйте функцию contains() . Функция вернёт true , если элемент, переданный ей в качестве аргумента, есть в коллекции. Также эту функцию можно использовать в форме оператора при помощи ключевого слова in .
Для проверки на наличие в коллекции сразу нескольких элементов используйте функцию containsAll() . В качестве аргумента передайте ей коллекцию искомых элементов.
Помимо прочего, вы можете проверить, содержит ли коллекция какие-либо элементы, вызвав isEmpty() или isNotEmpty() .
fun main() < val numbers = listOf("one", "two", "three", "four", "five", "six") println(numbers.isEmpty()) // false println(numbers.isNotEmpty()) // true val empty = emptyList() println(empty.isEmpty()) // true println(empty.isNotEmpty()) // false >
Kotlin list contains any
Отдельный вид операций позволяет проверить наличие элементов.
Функция all проверяет, все ли элементы коллекции/последовательности соответствуют условию предиката:
all(predicate: (T) -> Boolean): Boolean
Функция предиката получает каждый элемент и возвращает true, если элемент соответствует условию.
Функция any проверяет, соответствует хотя бы один элемент коллекции/последовательности условию предиката:
any(predicate: (T) -> Boolean): Boolean
Еще одна функция — none возвращает true, если ни один из элементов НЕ соответствует условию предиката:
none(predicate: (T) -> Boolean): Boolean
Проверка элементов на соответствие условию:
val people = listOf("Tom", "Kate", "Sam", "Alice", "Bob") // all println(people.all) // false println(people.all) // true // none println(people.none) // false println(people.none) // true // any println(people.any) // true println(people.any) // false
Также функции any() и none() имеют версии без параметров. В этом случае функция any() возвращает true, если коллекция/последовательность содержит хотя бы один элемент, а функция none() возвращает true, если коллекция/последовательность пуста:
val people = listOf("Tom", "Kate", "Sam", "Alice", "Bob") val empty: List = listOf() // any println(people.any()) // true println(empty.any()) // false // none println(people.none()) // false println(empty.none()) // true
Функция contains() возвращает true, если в коллекции/последовательности есть определенный элемент:
val people = listOf("Tom", "Sam", "Kate", "Bob", "Alice") println(people.contains("Sam")) // true println(people.contains("Bill")) // false
Еще одна функция — containsAll() возвращает true, если коллекция содержит все элементы другой коллекции:
val people = listOf("Tom", "Sam", "Kate", "Bob", "Alice") println(people.containsAll(listOf("Tom", "Sam")) ) // true println(people.containsAll(listOf("Tom", "Bill")) ) // false
List
A generic ordered collection of elements. Methods in this interface support only read-only access to the list; read/write access is supported through the MutableList interface.
Parameters
E — the type of elements contained in the list. The list is covariant in its element type.
Properties
size
Returns the size of the collection.
Functions
contains
Checks if the specified element is contained in this collection.
containsAll
Checks if all elements in the specified collection are contained in this collection.
get
Returns the element at the specified index in the list.
indexOf
Returns the index of the first occurrence of the specified element in the list, or -1 if the specified element is not contained in the list.
isEmpty
Returns true if the collection is empty (contains no elements), false otherwise.
iterator
Returns an iterator over the elements of this object.
lastIndexOf
Returns the index of the last occurrence of the specified element in the list, or -1 if the specified element is not contained in the list.
listIterator
Returns a list iterator over the elements in this list (in proper sequence).
Returns a list iterator over the elements in this list (in proper sequence), starting at the specified index.
subList
Returns a view of the portion of this list between the specified fromIndex (inclusive) and toIndex (exclusive). The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.
Extension Properties
indices
Returns an IntRange of the valid indices for this collection.
lastIndex
Returns the index of the last item in the list or -1 if the list is empty.
Extension Functions
all
Returns true if all elements match the given predicate.
any
Returns true if collection has at least one element.
Returns true if at least one element matches the given predicate.
asIterable
Returns this collection as an Iterable.
asReversed
Returns a reversed read-only view of the original List. All changes made in the original list will be reflected in the reversed one.
asSequence
Creates a Sequence instance that wraps the original collection returning its elements when being iterated.
associate
Returns a Map containing key-value pairs provided by transform function applied to elements of the given collection.
associateBy
Returns a Map containing the elements from the given collection indexed by the key returned from keySelector function applied to each element.
Returns a Map containing the values provided by valueTransform and indexed by keySelector functions applied to elements of the given collection.
associateByTo
Populates and returns the destination mutable map with key-value pairs, where key is provided by the keySelector function applied to each element of the given collection and value is the element itself.
Populates and returns the destination mutable map with key-value pairs, where key is provided by the keySelector function and and value is provided by the valueTransform function applied to elements of the given collection.
fun < T , K , V , M : MutableMap < in K , in V >> Iterable < T >. associateByTo (
destination : M ,
keySelector : ( T ) -> K ,
valueTransform : ( T ) -> V
) : M
associateTo
Populates and returns the destination mutable map with key-value pairs provided by transform function applied to each element of the given collection.
associateWith
Returns a Map where keys are elements from the given collection and values are produced by the valueSelector function applied to each element.
associateWithTo
Populates and returns the destination mutable map with key-value pairs for each element of the given collection, where key is the element itself and value is provided by the valueSelector function applied to that key.
binarySearch
Searches this list or its range for the provided element using the binary search algorithm. The list is expected to be sorted into ascending order according to the Comparable natural ordering of its elements, otherwise the result is undefined.
fun < T : Comparable < T >> List < T ? >. binarySearch (
element : T ? ,
fromIndex : Int = 0 ,
toIndex : Int = size
) : Int
Searches this list or its range for the provided element using the binary search algorithm. The list is expected to be sorted into ascending order according to the specified comparator, otherwise the result is undefined.
fun < T > List < T >. binarySearch (
element : T ,
comparator : Comparator < in T >,
fromIndex : Int = 0 ,
toIndex : Int = size
) : Int
Searches this list or its range for an element for which the given comparison function returns zero using the binary search algorithm.
fun < T > List < T >. binarySearch (
fromIndex : Int = 0 ,
toIndex : Int = size ,
comparison : ( T ) -> Int
) : Int