Найти в Дзене
KOTLIN_IT

Урок №55 по Котлин. Фильтрация

Фильтрация по условию Фильтрация является одной из распространенных операций. Для фильтрации по условию применяется функция filter(). В качестве параметра принимает условие-предикат в виде функции (T) -> Boolean filter(predicate: (T) -> Boolean): List<T>/Map<K, V>/Sequence<T> Функция предиката принимает в качестве параметра элемент набора. Если элемент соответствует условию, то возвращается true, а данный элемент помещается в возвращаемый набор. Для коллекций List и Set эта функция возвращает объект List, для Map - объект Map, для последовательностей Sequence - также объект Sequence Рассмотрим примеры: Для создания последовательности элементов, мы просто используем функцию sequenceOf() Рассмотрим ещё пример: Таким образом получаем вывод: Если надо получить элементы, которые, наоборот, НЕ соответствует условию, то можно применить функцию filterNot(), которая работает аналогично: В данном примере получаем значения с длиной, не равной 3 символам Фильтрация по индексу Получаем значения с
Оглавление

Фильтрация по условию

Фильтрация является одной из распространенных операций. Для фильтрации по условию применяется функция filter().

В качестве параметра принимает условие-предикат в виде функции (T) -> Boolean

filter(predicate: (T) -> Boolean): List<T>/Map<K, V>/Sequence<T>

Функция предиката принимает в качестве параметра элемент набора. Если элемент соответствует условию, то возвращается true, а данный элемент помещается в возвращаемый набор.

Для коллекций List и Set эта функция возвращает объект List, для Map - объект Map, для последовательностей Sequence - также объект Sequence

Рассмотрим примеры:

-2

Для создания последовательности элементов, мы просто используем функцию sequenceOf()

  • Далее используем фильтр у people, получаем значения длиной в 3 символа.
  • После выведем на экран результат с помощью функцию println.
  • Преобразуем список в строку используя метод joinToString.
  • Таким образом получаем вывод : Оля.

Рассмотрим ещё пример:

-3
  • создадим класс с именем Person, который принимает параметры имени и возраста.
  • создадим список с помощью listOf, в нем вызываем класс Person.
  • получаем всех Person, у которых age больше 30
  • выводим на экран

Таким образом получаем вывод:

-4

Если надо получить элементы, которые, наоборот, НЕ соответствует условию, то можно применить функцию filterNot(), которая работает аналогично:

-5

В данном примере получаем значения с длиной, не равной 3 символам

-6

Фильтрация по индексу

Получаем значения с длиной в 3 символа на четных индексах

-7

Получаем:

-8

Фильтрация по типу

Если коллекция/последовательность содержит элементы разных типов, то с помощью функции filterIsInstance() можно извлечь элементы определенного типа.

Например:

-9

В данном случае получаем из коллекции people только те объекты, которые представляют тип Employee. Чтобы указать тип получаемых объектов, при вызове функция типизируется соответствующим типом.

Получаем:

-10

Фильтрация по null

Функция filterNotNull() позволяет фильтровать все значение, которые равны null:

-11