Отфильтруйте список, затем измените тип - PullRequest
0 голосов
/ 19 февраля 2020

Как я могу составить список и фильтр одновременно? Я мог бы сделать это для циклов for, но должен быть способ Kotlin, который сделает его лучше.

fun getList(): List<Animal> = animals

fun test() {
    val list: Dog = getList().filter {
        it.age > 5
    }
}

list не может быть назначено, потому что it имеет тип Animal.

Как я могу преобразовать список в тип Dog и при этом выполнить фильтрацию?

1 Ответ

1 голос
/ 19 февраля 2020

Прежде всего, ваш код неверен. Согласно документам , функция фильтра возвращает список , содержащий только элементы, соответствующие данному предикату. Итак, вместо val list: Dog вы должны использовать val list: List<Dog>.

Насколько я понял, вы хотите получить список собак из списка животных, который удовлетворяет условию it.age > 5. Чтобы решить эту проблему, вы можете использовать filterIsInstance():

open class Animal(val age: Int)

class Dog(age: Int) : Animal(age)

fun test() {
    val animals = mutableListOf<Animal>()
    animals.add(Dog(6))
    animals.add(Animal(7))
    animals.add(Dog(8))

    val list: List<Dog> = animals
        .filterIsInstance(Dog::class.java)
        .filter {
            it.age > 5
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...