В Kotlin при работе с коллекциями или массивами часто возникает необходимость фильтровать элементы по их типам. Одним из полезных методов для этой задачи является filterIsInstance
. Этот метод позволяет извлекать элементы определенного типа из коллекции, предоставляя удобный способ выполнения фильтрации типов. В этой статье мы рассмотрим filterIsInstance
Понимание filterIsInstance
:
Метод filterIsInstance
— это функция расширения, доступная для коллекций и массивов в Kotlin. Он позволяет фильтровать элементы по их типу, возвращая новую коллекцию, содержащую только элементы, соответствующие указанному типу.
Пример кода 1. Фильтрация списка смешанных типов
val mixedList = listOf("Hello", 42, true, 3.14, "World")
val stringsOnly = mixedList.filterIsInstance<String>()
println(stringsOnly) // Output: [Hello, World]
В этом примере у нас есть смешанный список, содержащий элементы разных типов. Используя filterIsInstance<String>()
, мы можем извлечь из списка только элементы типа String
. Результирующий список stringsOnly
будет содержать только строки «Hello» и «World».
Пример кода 2. Фильтрация массива пользовательских объектов
data class Person(val name: String, val age: Int)
val people = arrayOf(Person("Alice", 25), Person("Bob", 30), "Not a Person")
val validPeople = people.filterIsInstance<Person>()
println(validPeople) // Output: [Person(name=Alice, age=25), Person(name=Bob, age=30)]
В этом примере у нас есть массив смешанных элементов, включая экземпляры класса Person
и строку. Используя filterIsInstance<Person>()
, мы можем извлечь из массива только элементы типа Person
, отфильтровав строку «Not a Person».
Пример кода 3. Фильтрация с наследованием
open class Animal
class Dog : Animal()
class Cat : Animal()
val animals = listOf(Dog(), Cat(), Dog(), "Not an Animal")
val dogsOnly = animals.filterIsInstance<Dog>()
println(dogsOnly) // Output: [Dog@123456, Dog@789012]
В этом примере у нас есть список смешанных элементов, включающий экземпляры классов Dog
и Cat
, а также строку. Используя filterIsInstance<Dog>()
, мы можем извлечь из списка только элементы типа Dog
, игнорируя строку и экземпляры Cat
.
Метод filterIsInstance
в Kotlin — это удобный инструмент для фильтрации типов, позволяющий извлекать элементы определенного типа из коллекций или массивов. Используя этот метод, вы можете легко манипулировать определенными типами и работать с ними без необходимости сложной логики фильтрации. Не забудьте использовать возможности filterIsInstance
в своем коде Kotlin для улучшения читаемости и удобства сопровождения.