Изучение filterIndexed в Kotlin: удобный метод фильтрации списков с примерами кода

Kotlin — это современный язык программирования, предлагающий богатый набор функций функционального программирования. Одним из таких полезных методов в Kotlin является filterIndexed, который позволяет фильтровать элементы из списка на основе их индексов. В этой статье мы рассмотрим метод filterIndexedи предоставим примеры кода, демонстрирующие его использование. Давайте погрузимся!

  1. Основное использование:
    Метод filterIndexedпринимает в качестве параметра лямбда-функцию, которая получает индекс и значение элемента каждого элемента в списке. Лямбда-функция должна возвращать логическое значение, указывающее, следует ли включать элемент в отфильтрованный список или нет. Вот простой пример:
val numbers = listOf(1, 2, 3, 4, 5, 6)
val filteredNumbers = numbers.filterIndexed { index, value -> index % 2 == 0 }
println(filteredNumbers) // Output: [1, 3, 5]

В этом примере мы отфильтровываем числа по четным индексам, в результате чего получается список [1, 3, 5].

  1. Доступ к индексу и элементу.
    Лямбда-функция filterIndexedобеспечивает доступ как к индексу, так и к значению элемента. Это позволяет применять сложные условия фильтрации на основе индекса или комбинации индекса и свойств элемента. Вот пример:
data class Person(val name: String, val age: Int)
val people = listOf(
    Person("Alice", 25),
    Person("Bob", 30),
    Person("Charlie", 35),
    Person("David", 40)
)
val filteredPeople = people.filterIndexed { index, person -> index % 2 == 0 && person.age > 30 }
println(filteredPeople) // Output: [Person(name=Charlie, age=35)]

В этом примере мы отфильтровываем людей старше 30 лет по четным индексам, в результате чего в списке содержится только человек «Чарли».

  1. Преобразование с помощью индекса.
    Метод filterIndexedтакже позволяет преобразовать отфильтрованный список, используя комбинацию функции mapIndexed. Вот пример:
val words = listOf("apple", "banana", "cherry", "date", "elderberry")
val filteredIndexedWords = words
    .filterIndexed { index, word -> index % 2 == 0 }
    .mapIndexed { index, word -> "Word at index $index: $word" }
println(filteredIndexedWords)
// Output: [Word at index 0: apple, Word at index 2: cherry, Word at index 4: elderberry]

В этом примере мы отфильтровываем слова по четным индексам и преобразуем их в список, включающий индекс и слово.

Метод filterIndexedв Kotlin предоставляет удобный способ фильтрации элементов из списка на основе их индексов. Используя значения индекса и элемента в лямбда-функции, вы можете создавать сложные условия фильтрации. Кроме того, вы можете комбинировать filterIndexedс другими функциями более высокого порядка, такими как mapIndexed, для выполнения преобразований в отфильтрованном списке. Начните использовать filterIndexedв своих проектах на Kotlin, чтобы упростить операции фильтрации списков и писать более чистый код!