Kotlin — это современный язык программирования, предлагающий богатый набор функций функционального программирования. Одним из таких полезных методов в Kotlin является filterIndexed
, который позволяет фильтровать элементы из списка на основе их индексов. В этой статье мы рассмотрим метод filterIndexed
и предоставим примеры кода, демонстрирующие его использование. Давайте погрузимся!
- Основное использование:
Метод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]
.
- Доступ к индексу и элементу.
Лямбда-функция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 лет по четным индексам, в результате чего в списке содержится только человек «Чарли».
- Преобразование с помощью индекса.
Метод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, чтобы упростить операции фильтрации списков и писать более чистый код!