Фильтр списка объектов на основе списка свойств объекта - PullRequest
0 голосов
/ 12 октября 2019

Каков наилучший способ отфильтровать список объектов со списком свойств данного объекта.

Вот пример кода, который показывает, чего я пытаюсь достичь:


    data class Person(
            val id: Long = 0,
            val name: String = ""
    )

    fun filterOutList(): List<Person>{

        val idsToRemove = listOf(1, 3)

        val listToFilter = listOf(
                Person(1, "John"),
                Person(2, "Jane"),
                Person(3, "Bob"),
                Person(4, "Nick")
        )

        // expecting to get a list only with Objects that have ids 2 and 4

        return listToFilter.filter { ??? provide `idsToRemove` to get only what was not in the list  }
    }

Ответы [ 3 ]

2 голосов
/ 12 октября 2019

Сделайте так: return listToFilter.filter { it.id !in idsToRemove }.

Чтобы его скомпилировать, вы должны явно указать параметр типа <Long> при создании idsToRemove: listOf<Long>(1, 3) или listOf(1L, 3L). Компилятор неявно выводит параметр типа <Int>.

0 голосов
/ 12 октября 2019

Я нашел следующее решение, которое работало для меня:

val filteredResponse = listToFilter.filter { ! idsToRemove.contains(it.id) }

Но, как упоминал @Bananon, мне пришлось явно указать idsToRemove: listOf<Long>(1, 3)

0 голосов
/ 12 октября 2019

Вы можете использовать нативный метод filter{ }. Следующим образом:

return listOf(
                Person(1, "John"),
                Person(2, "Jane"),
                Person(3, "Bob"),
                Person(4, "Nick")
        ).filter{ it.id == 2 || it.id == 4 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...