根据对象属性列表过滤对象列表

时间:2019-10-12 18:23:46

标签: kotlin collections

用给定对象的属性列表过滤掉对象列表的最佳方法是什么。

以下是示例代码,显示了我要实现的目标:


    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 个答案:

答案 0 :(得分:2)

以这种方式执行:return listToFilter.filter { it.id !in idsToRemove }

要对其进行编译,应在创建<Long>idsToRemovelistOf<Long>(1, 3)时显式指定listOf(1L, 3L)类型参数。编译器隐式推断<Int>类型的参数。

答案 1 :(得分:0)

您可以使用本机方法filter{ }。 如下:

return listOf(
                Person(1, "John"),
                Person(2, "Jane"),
                Person(3, "Bob"),
                Person(4, "Nick")
        ).filter{ it.id == 2 || it.id == 4 }

答案 2 :(得分:0)

我找到了适合我的以下解决方案:

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

但是正如@Bananon所提到的,我必须明确指定idsToRemove: listOf<Long>(1, 3)