Функция filterIndexed
Функция filterIndexed выполняет фильтрацию элементов коллекции,
используя предикат, который принимает два параметра: индекс элемента
и сам элемент. Возвращает новую коллекцию, содержащую только те элементы,
для которых предикат вернул true.
Импорт
import kotlin.collections.filterIndexed
Синтаксис
// Для Array
inline fun <T> Array<out T>.filterIndexed(
predicate: (index: Int, T) -> Boolean
): List<T>
// Для List
inline fun <T> Iterable<T>.filterIndexed(
predicate: (index: Int, T) -> Boolean
): List<T>
// Для Set
inline fun <T> Iterable<T>.filterIndexed(
predicate: (index: Int, T) -> Boolean
): List<T>
// Для Map
inline fun <K, V> Map<out K, V>.filterIndexed(
predicate: (index: Int, Entry<K, V>) -> Boolean
): Map<K, V>
Пример
Отфильтруем элементы массива, оставив только те, индекс которых делится на 2 без остатка:
val arr = arrayOf('a', 'b', 'c', 'd', 'e')
val res = arr.filterIndexed { index, element -> index % 2 == 0 }
println(res)
Результат выполнения кода:
List<Char> ['a', 'c', 'e']
Пример
Отфильтруем элементы списка, оставив только те, индекс которых больше 1 и значение больше 3:
val list = listOf(1, 2, 3, 4, 5)
val res = list.filterIndexed { index, value -> index > 1 && value > 3 }
println(res)
Результат выполнения кода:
List<Int> [4, 5]
Пример
Отфильтруем элементы множества, оставив только те, индекс которых не равен 0:
val set = setOf("apple", "banana", "cherry")
val res = set.filterIndexed { index, item -> index != 0 }
println(res)
Результат выполнения кода:
List<String> ["banana", "cherry"]
Пример
Отфильтруем элементы Map, оставив только те записи, индекс которых четный и значение содержит букву 'a':
val map = mapOf(1 to "apple", 2 to "banana", 3 to "cherry")
val res = map.filterIndexed { index, entry ->
index % 2 == 0 && entry.value.contains('a')
}
println(res)
Результат выполнения кода:
Map<Int, String> {1=apple, 2=banana}
Для каких типов коллекций работает
Функция filterIndexed доступна для следующих типов коллекций:
Array- массивыList- спискиSet- множестваMap- ассоциативные массивыIterable- любые итерируемые коллекцииSequence- последовательности
Смотрите также
-
функцию
filter,
которая фильтрует элементы без учета индекса -
функцию
filterNot,
которая возвращает элементы, не удовлетворяющие условию -
функцию
mapIndexed,
которая преобразует элементы с учетом их индекса -
функцию
forEachIndexed,
которая выполняет действие для каждого элемента с учетом индекса